Мне нужна экспертная помощь по оптимизации настройки мульти-сайта Discourse. У меня есть один веб-сервер (VM) и отдельный сервер базы данных (VM) у крупного облачного провайдера. Хотя оба сервера имеют хорошие характеристики, моя система перегружается большим объемом фоновых задач, что, похоже, создает чрезмерную нагрузку на базу данных.
Моя текущая конфигурация в app.yml следующая:
UNICORN_WORKERS: 4UNICORN_SIDEKIQS: 4DISCOURSE_SIDEKIQ_WORKERS: 10DISCOURSE_DB_POOL: 8
Судя по моим наблюдениям, проблема не в достижении жесткого лимита соединений, а в огромном количестве задач, одновременно конкурирующих за ресурсы базы данных. Очереди в Sidekiq постоянно заполняются, из-за чего сайт ощущается медленным, даже при выполнении базовых административных задач.
Мне нужен общий подход к настройке системы для обеспечения стабильности и производительности. В частности, я хотел бы понять лучшие практики по следующим вопросам:
- Конкурентность Sidekiq: Как следует настраивать параметр
DISCOURSE_SIDEKIQ_WORKERSв среде мульти-сайта для обработки большого объема задач без перегрузки базы данных? - Разделение очередей: Рекомендуется ли запускать отдельные процессы Sidekiq для обработки разных очередей (например,
criticalпротивlowприоритета)? Это позволило бы гарантировать, что тяжелые задачи не будут блокировать более срочные.
На данный момент я не ищу решения, требующих серьезных изменений в архитектуре или перехода на другой веб-сервер, так как хочу сохранить процесс максимально простым и безопасным. Надеюсь получить советы по безопасному и эффективному пути развития.
Спасибо!