Проблема массовой рассылки в Телеграмме 2.0
Вводные данные
Я пишу телеграмм бота на aiogram, его главная функция - отправка уведомлений пользователям. Это сообщение об мероприятиях. Пользователей ожидается много(от 100 до 5000), хочу чтобы все было отказоустойчивым. База данных асинхронная.
Проблема
Как отправить допустим 1 сообщений 200 пользователям моментально и не попасть в лимит телеграмма (20 или 30 сообщений в секунду)
Мои мысли
- Очередь с приоритетом на отправку сообщений сразу приходит на ум. Но как её организовать? Думаю можно заменить во всем коде
dp.bot.send_message()
своей функцией, допустимmessagequerry.add(chat_id: int, text:str, priority:int)
. Сделать связанный список, держать его в бд и постепенно отсылать сообщения, не выходя из лимита 20 сообщений/сек, т.е.asyncio.sleep(0.1)
. Но 200 сообщений вызовут как минимум 400 обращений к бд. Это не особо страшно, более того они растянуты во времени. Но хотелось бы оптимизировать. Как это оптимизировать? - Сделать рандомный timeout? - но есть вероятность попасть в лимит при большом кол-ве участников и маленьком range
Похожий вопрос к сожалению не дал ответа, хотя проблема по логике частая, возможно искал по неправильным тегам.
Источник: Stack Overflow на русском