Как можно создавать воркеров и балансировать Telegram бота?
Есть бот модератор, который состоит в большом количестве групп и модерирует их на наличие запрещенных слов, раньше все работало хорошо, количество запросов не превышало 30, но сейчас это около 3000 запрсоов в секунду и один сервер на котором раньше все стояло (стек nginx + php-fpm + mysql + redis, а так же админ панель) попросту не справляется, поэтому появились такие вопросы:
1) Mysql сильно нагружает систему. Из-за частых операций с базой (пользоватлеь сменил имя, оставил какое-то сообщение, изменил сообщение и т.д необходимо хранить, поэтому чуть ли не каждый запрос на вебхук - это минимум один запрос к базе) может лечь php скрипт, который является вебхуком, из-за чего телеграм отправляет ещё больше вебхуков т.к не получил ответа от предыдущих, потому что они не получили ответа от базы. Данные необходимо обновлять в реалтайме, поэтому возник вопрос как это лучше сделать? Перенести на другой сервер базу? Или это не поможет ситуации и все станет ещё хуже?
2) Одна точка доступа так же является узким горлышком в системе. На неё подвязаны все боты (для удобства админы групп могут создавать личных ботов и добавлять в конфы), была идея передавать все запросы на rabbitmq, которые бы разбирали воркеры, но как я понимаю скрипт должен быть запущен демоном и сам запрашивать с очереди запрос? Можно ли это реализовать так, чтобы на стороне куда идет вебхук происходила его верификация, если все ок и этот бот закреплен за каким-либо администратором - передавать вебхук на одного из воркеров?
Разберитесь, где точно не хватает производительности. Если это MySQL, то в первую очередь нужно разобраться, что можно оптимизировать в ней. Что именно проседает? И, если уж совсем ничего нельзя сделать, то тогда займетесь слейвами или вообще шардированием.
Rabbitmq поможет не ждать базу скриптам на вебхуках, но если база перегружена, то очередь будет копиться.
То, что точка доступа одна, это не означает, что там бутылочное горлышко. Нет резерва при отказе - да, но не факт что там все перегружено.
И, если вебхуков так много, есть ли в них тогда смысл? Не проще ли, забирать все новые сообщения и делать пакетные вставки в базу, а не по одной штуке.