2013-06-25 2 views
14

Допустим, у меня есть следующие процессы, объявленным в моем PROCFILEBest Practices для запуска сельдерей на Heroku

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-брокер.

Я пробовал альтернативу running multiple processes on a single dyno, но он не работает надежно и в любом случае не является чем-то, что я хотел бы использовать в производстве.

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

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

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

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

+1

(отказ от ответственности: это не решение). Я бы рекомендовал взглянуть на решения, не связанные с сельдереем, которые может предложить раздел дополнений Heroku, а также их основной планировщик. Сельдерей * чувствует * как всеобъемлющее решение, но ИМХО это боль, чтобы справиться. Посмотрите также на SQS. Вы можете написать собственное решение, которое работает на одном или нескольких динамиках менее чем на 30 строк кода, используя SQS (http://boto.readthedocs.org/en/latest/ref/sqs.html делает SQS ультрапростым) , – orokusaki

ответ

2

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

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

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

+0

Ну, я использую 'gevent' с' gunicorn', и это работает для процесса 'web'. Однако одно и то же не может быть использовано для использования сельдерея. –

+1

Один работник сельдерея может предлагать параллелизм через eventlets. Возможно, вы пропустили ссылку в своем ответе? По-прежнему, как объяснено, вам потребуется минимум 2 процесса, один для работающих одновременно (с eventlet) и один для планирования. –

+0

Я пропустил ссылку. Это делает работу рабочих сельдерея более оптимальной. Хотя я по-прежнему считаю, что лучшей альтернативой сейчас является не использование сельдерея с моделью процесса Heroku и запуск планировщика Heroku. –