1

我是 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 服务扩展工作服务?

4

1 回答 1

2

有两个技巧。首先,您可以为您的 www 和 worker 服务使用不同的approot来分离它们将运行的代码:

www:
  type: python
  approot: frontend
# ...
worker:
  type: python-worker
  approot: backend
# ...

其次,由于每个approot的安装后脚本都不同,因此您可以复制一个文件以成为该特定服务的正确 supervisord.conf。

您可能还想查看 dotCloud 教程和 django-celery 的示例代码。

/安迪

于 2012-08-13T22:40:16.867 回答