Я как создал crate для CLI, идея в голову пришла сделать ему команду telegram, которой даёшь токен от телеграм-бота, оно ходит в телеграм и перекладывает приходящие боту события в коллекцию. Так же можешь сказать «у меня есть N воркеров, раскинь события по N коллекциям так, чтобы пара чат-пользователь была привязана к коллекции, чтобы я не думал о том что другой воркер может быстрее обработать следующее сообщение пользователя перед тем как я предыдущее обработал».
Затем пишем код этих воркеров, которые забирают из своих коллекций обновления, обрабатывают, как обработали какое-то количество событий которые идут последовательно с начала — записывают в свою «выходную» коллекцию результат (noop/ответить пользователю/прочее) и коммитят поколоние.
CLI следит за изменениями в выходных коллекциях воркеров, дёргает методы у телеграма, если всё ок — помечают фантомной записью что действие выполнено, удаляет сначала событие из входной коллекции воркера, затем из выходной.
По итогу:
◾️ Если воркер перед обработкой события проверяет, что уже записывал в выходную коллекцию — то не повторит этого снова, а если не записано — то и действий никаких совершено быть не могло. Т.е. воркер тривиально переживает рестарты.
◾️ Логика по повторению запросов к телеграму/управлению количеством запросов от одного токена перекладывается на CLI. Т.е. у воркеров меньше болит голова.
◾️ CLI переживает рестарты, страдают только не идемпотентные запросы к телеграму (отправка сообщения от бота, к сожалению, не идемпотентна, в отличие от отправки сообщения пользователем) если мы не успели записать в базу результат. Но от этого никто не застрахован.
... но пока не до этого, хотя и очень хочется сделать бота, которому бы я данные для https://fiesta.an5wer.com/ кормил, вместо того чтобы через админку натыкивать.
#diffbelt
Затем пишем код этих воркеров, которые забирают из своих коллекций обновления, обрабатывают, как обработали какое-то количество событий которые идут последовательно с начала — записывают в свою «выходную» коллекцию результат (noop/ответить пользователю/прочее) и коммитят поколоние.
CLI следит за изменениями в выходных коллекциях воркеров, дёргает методы у телеграма, если всё ок — помечают фантомной записью что действие выполнено, удаляет сначала событие из входной коллекции воркера, затем из выходной.
По итогу:
◾️ Если воркер перед обработкой события проверяет, что уже записывал в выходную коллекцию — то не повторит этого снова, а если не записано — то и действий никаких совершено быть не могло. Т.е. воркер тривиально переживает рестарты.
◾️ Логика по повторению запросов к телеграму/управлению количеством запросов от одного токена перекладывается на CLI. Т.е. у воркеров меньше болит голова.
◾️ CLI переживает рестарты, страдают только не идемпотентные запросы к телеграму (отправка сообщения от бота, к сожалению, не идемпотентна, в отличие от отправки сообщения пользователем) если мы не успели записать в базу результат. Но от этого никто не застрахован.
... но пока не до этого, хотя и очень хочется сделать бота, которому бы я данные для https://fiesta.an5wer.com/ кормил, вместо того чтобы через админку натыкивать.
#diffbelt