我是dotcloud的新手,对多个服务如何协同工作感到困惑。
我的yaml构建文件是:
www:
type: python
db:
type: postgresql
worker:
type: python-worker
broker:
type: rabbitmq
我的supervisord文件包含启动django celery& amp; celerycam。
当我将代码推送到我的应用程序时,我可以看到www和&工人服务开始他们自己的芹菜和& celery cam,还有例如日志文件会有所不同。这是有道理的(虽然在IMO的dotcloud文档中没有明确说明 - 文档讨论了如何设置工作服务,但没有说明如何将其与其他服务相结合),但确实提出了如何配置应用程序的问题python服务主要服务于网页,而python工作服务则用于后台任务,例如:芹菜。
dotcloud documentation daemon提到了这一点:
“但是,在扩展应用程序时,您应该知道, cron任务将安排在所有缩放的实例中 - 这是 可能不是你需要的!所以在很多情况下,它仍然会更好 使用单独的服务。
同样,很多(非工作者)服务已经运行Supervisor,所以 您可以在这些服务中运行其他后台作业。然后, 请记住,如果这些后台作业将在多个实例中运行 你扩展你的应用程序。此外,如果您添加后台作业 您的网络服务,它将获得更少的资源来提供页面和您的服务 表现将受到重创。“
如何配置dotcloud&您的应用程序只在一个服务上运行Web服务器,在工作服务上运行后台任务?您是通过增加芹菜中的并发设置(并垂直扩展一个服务),添加额外的工作服务,还是两者兼而有之,来扩展工作者?
您是否会这样做,以便首先Web服务器服务不必在处理后台任务时使用资源,其次,您可以独立于Web服务器服务扩展工作服务?
答案 0 :(得分:2)
有两个技巧。 首先,您可以为www和worker服务使用不同的approots来分隔它们将运行的代码:
www:
type: python
approot: frontend
# ...
worker:
type: python-worker
approot: backend
# ...
其次,由于每个批准的postinstall脚本不同,您可以复制文件以成为该特定服务的正确supervisord.conf。
您可能还想查看django-celery的dotCloud教程和示例代码。
/安迪