Используя базу данных, вы можете достигать 1000+ приращений в секунду с одним ядром. Это довольно легко. Вы можете использовать его собственную базу данных в качестве бэкэнда для генерации этого числа (как это должно быть его собственной совокупности, в терминах DDD).
У меня была похожая проблема. У меня было несколько разделов, и я хотел получить счетчик смещения для каждого. Я реализовал что-то вроде этого:
CREATE DATABASE example;
USE example;
CREATE TABLE offsets (partition INTEGER, offset LONG, PRIMARY KEY (partition));
INSERT offsets VALUES (1,0);
Затем выполнил следующий оператор:
SELECT @offset := offset from offsets WHERE partition=1 FOR UPDATE;
UPDATE offsets set offset=@offset+1 WHERE partition=1;
Если ваше приложение позволяет вам, вы можете выделить блок сразу (это был мой случай).
SELECT @offset := offset from offsets WHERE partition=1 FOR UPDATE;
UPDATE offsets set offset=@offset+100 WHERE partition=1;
Если вам нужна дополнительная пропускная способность и вы не можете заранее распределить смещения, вы можете реализовать свой собственный сервис, используя Flink для обработки в реальном времени. Мне удалось получить около 100K приращений на раздел.
Надеюсь, это поможет!