Архитектура телеграм-бота для 150 тысяч пользователей одновременно

Я собираюсь создать телеграмм-бота для одновременной обработки 150 тыс. пользователей (в секунду).

Я собираюсь использовать TDLib (потому что я хочу столкнуться с ограничениями Telegram Bot API около 30 сообщений в секунду).

Раньше я всегда использовал Telegram Bot Webhook. Я зарегистрировал webhook, чтобы указать на свой сервер. А мой сервер обрабатывает запросы от Telegram и отправляет сообщения пользователям. У меня не было никакой нагрузки на моем сервере. Максимальная загрузка 10 или 30 пользователей в секунду.

Теперь я собираюсь использовать TDLib. Итак, взаимодействие по архитектуре.

Взаимодействие 1. Telegram Webhook + TDLib

Это не работает, потому что в логах nginx я вижу, что nginx не получает никаких запросов веб-хука, когда работает TDLib.

Взаимодействие 2. Несколько экземпляров TDLib

Оно работает. Каждый экземпляр может отправлять сообщения и получать обновления. Но я беспокоюсь о сетевом трафике, потому что каждый экземпляр будет получать все обновления.

Взаимодействие 3. Один экземпляр TDLib (ВЫБРАН В НАСТОЯЩЕЕ ВРЕМЯ)

Один экземпляр TDLib получает все обновления и просто отправляет их в очередь (назовем его in.queue).

Я напишу программу для обработки обновлений из очереди in.queue.

Обработка обновления из очереди заключается в создании команды ответа и отправке ее в другую очередь (out.queue).

Экземпляр TDLib прослушивает out.queue и применяет команду.


Но я хочу знать, как я могу протестировать своего бота перед развертыванием в рабочей среде.

Можно ли как-то сэмулировать такую ​​нагрузку (150к пользователей одновременно) для проверки моей архитектуры?


person atygaev.mi    schedule 13.11.2019    source источник
comment
150к пользователей одновременно? что? В любом случае, TDLib — лучший выбор, потому что он создает прямой TCP-туннель между вами и Telegram. Я думаю, вам следует написать в @BotSupport, потому что это очень острый случай, возможно, вы сможете найти решение. PS: Вы пробовали использовать Webhooks с балансировщиком нагрузки?   -  person MarcoBuster    schedule 14.11.2019
comment
@MarcoBuster спасибо за ваш ответ. Я все равно решил использовать TDLib. О балансировщике нагрузки. Это помогает удерживать пользователей, но не работает с ограничениями Telegram, отправляя сообщения пользователям. Да, я могу использовать прямой ответ, но когда я хочу отправить какое-то сообщение каждому пользователю, я столкнусь с ограничениями Telegram Bot API (30 сообщений в секунду).   -  person atygaev.mi    schedule 23.11.2019
comment
Когда вы отправляете глобальные сообщения многим пользователям, вы должны замедляться и спать каждые n, если время не так важно. С очень большой базой пользователей это может занять несколько дней, но это единственный способ. Опять же, возможно, если вы объясните свою ситуацию [@]BotSupport, они смогут помочь вам, удалив некоторые ограничения API.   -  person MarcoBuster    schedule 23.11.2019


Ответы (1)


Вы уверены, что использование TdLib вместо BOT.Api не выходит за пределы телеграммы? Вы достигли каких-либо улучшений?

person Graymind    schedule 04.12.2020