Використовуючи базу даних, ви можете досягати 1,000+ кроків за секунду з одним ядром. Це досить просто. Ви можете використовувати власну базу даних як бекенд, щоб генерувати це число (як це має бути власний агрегат, з точки зору 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 для обробки в режимі реального часу. Мені вдалося отримати приблизно 100 КК на одну секцію.
Сподіваюся, це допомагає!