我是 dotcloud 的新手,对多种服务如何协同工作感到困惑。
我的 yaml 构建文件是:
www:
type: python
db:
type: postgresql
worker:
type: python-worker
broker:
type: rabbitmq
我的 supervisord 文件包含启动 django celery 和 celerycam 的命令。
当我将代码推送到我的应用程序时,我可以看到 www 和 worker 服务都启动了它们自己的 celery 和 celery cam 实例,例如日志文件也会有所不同。这是有道理的(尽管在 IMO 的 dotcloud 文档中并没有说得很清楚 - 文档讨论了设置工作服务,但没有讨论如何将其与其他服务结合起来),但确实提出了如何配置应用程序的问题其中 python 服务主要服务于网页,而 python worker 服务用于后台任务,例如:celery。
dotcloud文档守护进程提到了这一点:
“但是,您应该知道,当您扩展应用程序时,cron 任务将安排在所有扩展的实例中——这可能不是您所需要的!因此,在许多情况下,使用单独的服务仍然会更好。
同样,许多(非工作)服务已经运行了 Supervisor,因此您可以在这些服务中运行额外的后台作业。再说一次,请记住,如果您扩展应用程序,这些后台作业将在多个实例中运行。此外,如果您将后台作业添加到您的 Web 服务,它将获得更少的资源来服务页面,并且您的性能将受到重大影响。”
您如何配置 dotcloud 和您的应用程序以仅在一项服务上运行网络服务器,并在工作人员服务上运行后台任务?您会通过增加 celery 中的并发设置(并垂直扩展一项服务)、添加额外的工作人员服务或两者兼而有之来扩展工作人员吗?
您是否会这样做,首先 webserver 服务不必在处理后台任务时使用资源,其次您可以独立于 webserver 服务扩展工作服务?