Отказоустойчивые телеграм боты



Абсолютно рандомный пост)



Типичный телеграм бот работает следующим образом:



1. Есть один инстанс приложения, где крутится бот

2. Он ходит в лонг-поллинг апишку телеграма с запросом на получение последних событий

3. Получает события, локально сохраняет last_update_id последнего события

4. В следующий раз идет с запросом update_id > last_update_id



---



Как это дело масштабировать на несколько инстансов, чтобы распределить нагрузку и добиться отказоустойчивости?



Если просто запустить два инстанса с лонгполлингом, то произойдет следующее:



1. Первый инстанс идет в апишку, ожидает событий

2. Второй инстанс идет в апишку, получает 409 — только один клиент может ожидать событий для конкретного бота



И вариант решения здесь — вебхуки



1. Создаем балансировщик нагрузки с публичным ip, который будет распределять нагрузку по нашим инстансам

2. Идем в апишку телеграма, регаем для бота коллбек на этот ip

3. Теперь телеграм сам будет ходить в наш балансировщик нагрузки, а он уже распределит трафик по разным хостам нашего приложения