14

假设我在我的 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

我基本上必须运行我的主要 Web 进程的一些测功机。运行调度程序。运行几个工人。监控芹菜。单独使用托管的 AMQP 代理。

我已经尝试过在单个测功机上运行多个进程的替代方法,但它似乎不能可靠地工作,而且无论如何我不想在生产中使用。

我发现运行所有这些的成本有点令人望而却步,尤其是当我认为我可以在单个测功机上组合一些进程时。也许将调度程序与监控结合起来,或者将调度程序和工作程序一起运行。

除此之外,Heroku 仅公开了 80 和 443 个端口,并且无法在同一个测功机上的多个端口上运行服务。

什么是优化流程和测功机使用的好策略?

或者,如果运行 celerycam 为您的成本增加了另一个测功机,那么如何在 heroku 上监控 celery 任务?

4

1 回答 1

2

您可以查看使用eventlet来扩展您的工作池而不增加测功机的数量。

不幸的是,基于 eventlet 的工作人员不支持调度/节拍(-B 开关)。因此,您仍然需要调度程序的额外进程。

至于监控,我建议只在您的本地机器或其他服务器上临时运行监控器。

于 2014-01-12T23:38:16.957 回答