
⚡Отказоустойчивые телеграм боты
Абсолютно рандомный пост)
Типичный телеграм бот работает следующим образом:
1. Есть один инстанс приложения, где крутится бот
2. Он ходит в лонг-поллинг апишку телеграма с запросом на получение последних событий
3. Получает события, локально сохраняет last_update_id последнего события
4. В следующий раз идет с запросом update_id > last_update_id
---
Как это дело масштабировать на несколько инстансов, чтобы распределить нагрузку и добиться отказоустойчивости?
Если просто запустить два инстанса с лонгполлингом, то произойдет следующее:
1. Первый инстанс идет в апишку, ожидает событий
2. Второй инстанс идет в апишку, получает 409 — только один клиент может ожидать событий для конкретного бота
И вариант решения здесь — вебхуки
1. Создаем балансировщик нагрузки с публичным ip, который будет распределять нагрузку по нашим инстансам
2. Идем в апишку телеграма, регаем для бота коллбек на этот ip
3. Теперь телеграм сам будет ходить в наш балансировщик нагрузки, а он уже распределит трафик по разным хостам нашего приложения
Абсолютно рандомный пост)
Типичный телеграм бот работает следующим образом:
1. Есть один инстанс приложения, где крутится бот
2. Он ходит в лонг-поллинг апишку телеграма с запросом на получение последних событий
3. Получает события, локально сохраняет last_update_id последнего события
4. В следующий раз идет с запросом update_id > last_update_id
---
Как это дело масштабировать на несколько инстансов, чтобы распределить нагрузку и добиться отказоустойчивости?
Если просто запустить два инстанса с лонгполлингом, то произойдет следующее:
1. Первый инстанс идет в апишку, ожидает событий
2. Второй инстанс идет в апишку, получает 409 — только один клиент может ожидать событий для конкретного бота
И вариант решения здесь — вебхуки
1. Создаем балансировщик нагрузки с публичным ip, который будет распределять нагрузку по нашим инстансам
2. Идем в апишку телеграма, регаем для бота коллбек на этот ip
3. Теперь телеграм сам будет ходить в наш балансировщик нагрузки, а он уже распределит трафик по разным хостам нашего приложения