Как стать автором
Обновить

Комментарии 16

Главное ограничение масштабирования тгботов - лимит на количество сообщений в единицу времени.

  1. Развертывание нескольких экземпляров бота: Это может быть выполнено с помощью контейнеризации (например, Docker) и оркестрации (например, Kubernetes), что облегчает развертывание и управление множеством экземпляров.

Как это реализовано в aiogram?

Вангую, НИ КАК!!!! апи телеги 1 на всех.

Это не так. Распределение запросов в адрес Telegram Bot API происходит через шардирование (определённые боты ходят на определённые серверы). При необходимости вы можете самостоятельно развернуть такой сервер у себя.

Это как же развернуть у себя телегу? ))) вы пользуетесь апи которое предоставляет телега, и врядли можете влиять.

Спасибо! Видно я пропустил такое обновление! Думаю что, вы правы!

просветите плз, какой лимит на количество сообщений в единицу времени у тг?

Почему вы не просвещаетесь официальной документацией?

конкретно в aiogram это нереализовано, но можно это реализовать с помощью Docker Compose

об этом и других способах писал здесь https://habr.com/ru/companies/otus/articles/760890/

Вопросы сходу:

  1. Весь ваш код не рабочий, т.к. pip install aiogram установит третью версию aiogram, а ваш код заточен под вторую версию. Третья и вторая версия имеют разную архитектуру и не имеют обратной совместимости.

  2. "Модульная Архитектура" теперь реализована с помощью роутеров, ваш подход неоптимален.

  3. В распределенной архитектуре Телеграм‑бота используются несколько серверов или экземпляров бота для распределения нагрузки. Как вы предлагаете запустить несколько экземпляров одного бота? Попытка запустить второй экземпляр бота приводит к "Terminated by other getupdates request; make sure that only one bot instance is running"

  4. Хотя интеграция с ELK Stack (Elasticsearch, Logstash, Kibana) на уровне кода может быть сложной. В чём сложность логгировать в json?

  5. В разделе "Оптимизация взаимодействия с БД" вы предлагаете выполнять подключение к БД при вызове бизнес-функции. Вы серьёзно?? Подключение - одна из самых затратных операций. Куда правильней на уровне мидлвири добавлять сессию в update, а подключение выполнять при инициализации бота.

  6. Развертывание нескольких экземпляров бота: Это может быть выполнено с помощью контейнеризации (например, Docker) и оркестрации (например, Kubernetes) - ещё раз спрошу, как вы собрались запустить несколько экземпляров одного бота?

Проблема создания нескольких инстансов не разрешается реализацией через webhook?

Для развёртывания нескольких экземпляров бота нужно использовать вебхуки. В статье, к сожалению, этого не описано.

А это разве должно помочь? На один бот вешается один вебхук, а количество юзеров может быть любым

А как это поможет?
Ну Ок, поставили мы обратный прокси, в который телега кидает апдейты и они раскидываются по очередям, экземплярам итд. А что потом? Потом надо отвечать обратно в телегу. И там куча ограничений от самой телеги.

API не позволит отправлять более 30 сообщений в секунду.
Бот не сможет отправлять в одну и ту же группу более 20 сообщений в минуту.
Отправляя сообщения внутри определенного чата, избегайте отправки более одного сообщения в секунду.


Как это помогут обойти вебхуки?

Другой случай - одна программа и несколько токенов бота на одном компьютере. Я это сделал через systemd-запускаю сервис с параметром. А программа анализирует параметр и выбирает токен бота который надо запустить

По итогу, это N разных ботов

Зарегистрируйтесь на Хабре, чтобы оставить комментарий