Сколько рабочих сельдерея и гуникорн на одном сервере?

Сколько рабочих сельдерея и гуникорн на одном сервере?

У меня есть один сервер, на котором запущено приложение Django, обслуживаемое gunicorn, и очередь задач Celery.

Гуникорндокументы предполагают(2 x $num_cores) + 1 — количество рабочих процессов по умолчанию.

Сельдерей документыпокажите, что число рабочих процессов Celery по умолчанию равно 1 x $num_cores.

И оба предлагают экспериментировать, чтобы найти правильное число.

Мой вопрос: какое правило будет хорошим для запуска Gunicorn и Celery на одной машине? На восьмиядерной машине мне следует начать с 17 Gunicorn и 8 Celery worker? Или имеет смысл начать, скажем, с 9 Gunicorn и 4 Celery worker?

Если это поможет, система привязана к процессору.

решение1

Любая настройка производительности часто является скорее успокоением, чем жесткими и быстрыми правилами. Недавно мне пришлось сделать что-то похожее с моим приложением Django, которое кто-то решил использовать не по назначению. Когда вы запускаете Gunicorn и Celery на одной машине, вам в идеале следует начать с более сбалансированного подхода, а не максимизировать рабочие процессы Gunicorn. Вот мой подход:

  • Рабочие Gunicorn:

    • Начните с немного меньшего количества рабочих Gunicorn, используя формулу: 2 * $num_cores + 1
    • Для 8-ядерной машины вы можете начать с 8-12 рабочих узлов Gunicorn.
    • Причина этого в том, что вы хотите убедиться, что для рабочих процессов Celery еще остались ресурсы ЦП, поскольку задачи Celery могут быть ресурсоемкими.
  • Работники сельдерея:

    • Вы можете использовать «рекомендуемое» количество работников Celery.
    • Его можно определить как 1 * $num_cores
    • Например, для 8-ядерной машины вы можете начать с 8 рабочих процессов Celery.

Таким образом, на 8-ядерной машине хорошая стартовая конфигурация может выглядеть так:

  • Gunicorn: 8-12 рабочих
  • Сельдерей: 8 рабочих

Цель состоит в том, чтобы не перегружать рабочие процессы Gunicorn и оставить ресурсы ЦП хотя бы для рабочих процессов Celery.

Связанный контент