Лучшие практики для ведения сельдерея на героику - программирование
Подтвердить что ты не робот

Лучшие практики для ведения сельдерея на героику

Предположим, что у меня есть следующие процессы, объявленные в моем Procfile

web: newrelic-admin run-program python manage.py run_gunicorn -b 0.0.0.0:$PORT -w 9 -k gevent --max-requests 250 --preload --timeout 240
scheduler: python manage.py celery worker -B -E --maxtasksperchild=1000
worker: python manage.py celery worker -E --maxtasksperchild=1000
celerymon: python manage.py celerymon -B 0.0.0.0 -P $PORT

Мне в основном нужно запустить несколько динамиков моего основного веб-процесса. Запустите планировщик. Запустите несколько рабочих. Монитор сельдерея. Отдельно используйте размещенный AMKP-брокер.

Я попробовал альтернативу запускать несколько процессов на одном динамике, но он, похоже, не работает надежно, и в любом случае это не то, что я хотели бы использовать в производстве.

Я считаю, что затраты на выполнение всего этого немного непомерно высокие, особенно когда я думаю, что я мог бы объединить некоторые процессы на одном дино. Возможно, объединение планировщика с мониторингом или запуск планировщика и рабочего вместе.

К этому добавляется тот факт, что Heroku открыт только 80 и 443 портами, и нет возможности запускать службы на нескольких портах на одном и том же dyno.

Что было бы хорошей стратегией для оптимизации процесса и использования dyno?

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

4b9b3361

Ответ 1

Вы можете использовать eventlet для масштабирования рабочего пула без увеличения числа динамиков.

К сожалению, сотрудники, связанные с событиями, не поддерживают планирование/биты (-B-переключатель). Поэтому вам потребуется дополнительный процесс для планировщика.

Что касается мониторинга, я бы предложил просто запустить монитор с локальной машины или другого сервера на разовой основе.