在heroku上运行芹菜的最佳实践



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

我基本上必须运行我的主要网络进程的一些动态。运行调度程序。管理一些工人。监控芹菜。单独使用托管的AMQP代理。

我尝试过在一个dyno上运行多个进程的替代方案,但它似乎不可靠,而且无论如何我都不想在生产中使用。

我发现运行这一切的成本有点高,尤其是当我认为我可以在一个dyno上结合一些过程时。也许可以将调度程序与监视相结合,或者将调度程序和工作程序一起运行。

此外,Heroku只公开了80和443个端口,并且无法在同一个dyno上的多个端口上运行服务。

优化流程和dyno使用的好策略是什么?

或者,如果运行celerycam会给你的成本增加另一个dyno,那么如何在heroku上监控芹菜任务呢?

您可以考虑使用eventlet在不增加dynos数量的情况下扩展工作池。

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

至于监控,我建议只在本地机器或另一台服务器上运行监控器。

相关内容

  • 没有找到相关文章

最新更新