Как организовать отказоустойчивость бота (long running process)?
Привет. Есть telegram bot. Нужно его повесить куда-то онлайн и организовать отказоустойчивость. Как это правильно сделать? Дайте пожалуйста линки на хорошие туториалы. На данный момент стек бота: PHP + Redis.
По сути бот - это long-running process, либо он сам делает запросы на api.telegram.org, либо слушает новые апйдеты, с помощью webhook фичи. Если этот процесс упадет, то и сам бот понятно реквесты от юзера не будет обрабатывать. Нужно организовать отказоустойчивость, чтобы либо этот процесс сам себя поднимал (раньше использовал такую утилиту как supervisord для этого) либо, чтобы автоматически запускался второй процесс с ботом и уже он обрабатывал реквесты. Я не знаю, как это делается в современном мире. Best practices линки были бы очень полезны.
Так же интересует доп. фичи, такие как уведомеления в случае отказа одной из подсистем, например Redis'а и сбор, обработка и вывод логов куда-то (Elasticsearch + Logstash?).
Ваш бот обычный процесс cli php? какие проблемы, запускать его с помощью простой команды while(true);do php main.php;sleep 1;done
Будет бесконечно пытаться запустить php main.php с паузой между запусками 1 секунду.
Само собой запускать можно из любого другого приложения на другом языке программирования, хоть том же php.
Озаботьтесь о записи логов и рассылке сообщений после каждого падения (или например превышении их количества за некоторый период, или при особых сообщениях об ошибке и прочее прочее) чтобы вы как адимнистратор знали что происходит, а то вдруг приложение будет завершаться сразу после запуска, например из-за синтаксической ошибке в конфигурационном файле.
Условно есть file bot.php внутри которого уже есть while(true) и внутри этого цикла делаются запросы на getUpdates с Телеграма и происходит обработка вытащенных сообщений и запросов, там есть и try - catch и логирование и т.д.
Мой вопрос состоит в том, чтобы как-то это залить на сервер и поддерживать этот процесс в рабочем состоянии 24/7 или хотя бы сделать минимальный простой. Т.е если сам процесс упадет, то сообщения от пользователей обрабатываться не будут и будут просто накапливаться...
Как можно решить эту проблему?
Александр Дуплий, php при фатальных ошибках крашит процесс, и не все try catch отлавивалиет, т.е. отказоустойчивым процесс сделать очень сложно.
Поэтому и разделяют приложение собственно для функционала и приложение для его запуска, так как это 'дешевле' во всех смыслах для разработки и поддержания.
По поводу накопления сообщений от пользователей, для telegram это и есть ваш bot.php, я не знаю как именно там организован сбор сообщений, и буферизирует ли сервер их, это уже сами разбирайтесь, но сам bot.php делайте максимально легко перезапускаемым, это как минимум минимизирует простои.