видимо я где-то не понимаю вашу мысль вы можете расписать на низком уровне как у вас будет происходить обновление баланса и разрешение на транзакцию? может так будет лучше понятно
1. пришел запрос 2. открываем транзакцию в базе 3. считаем по ЕС от снапшота до текущего момента баланс 4. если баланса хватает - пишем транзакцию в ЕС таблицу на -100 5. коммитим транзакцию 6. даем ответ ОК на запрос
и вот таких будет 1000 штук в секунду, обработка будет на разных инстансах железа у бекенда
ну в принципе верно описано, но мы не обновляем, мы делаем инсерт новой транзакции, что по сути исключает конкурнетные запросы, и если в какой-то момент вдруг баланса станет недостаточно - получим ответ недостоточно средств
1. Изменение баланса затрагивает один аккаунт за раз. Аккаунт наша партиция, мы можем раскидывать партиции на разные ноды базы. 2.перевод с одного аккаунта на другой это всегда две транзакции на двух аккаунтах
Такая схема должна хорошо масштабироваться.
Если проблема что тысяча транзакций в пределах аккаунта - если у тебя es можно в целом не полагаться на базу и там мутить всякие райплайны курсоры и батчинг.