2012-08-11 70 views
1

我是dotcloud的新手,對多種服務如何協同工作感到困惑。Dotcloud多項服務

我YAML構建文件:

www: 
    type: python 
db: 
    type: postgresql 
worker: 
    type: python-worker 
broker: 
    type: rabbitmq 

而且我supervisord文件中包含的命令來啓動Django的芹菜& celerycam。

當我將我的代碼推送到我的應用程序時,我可以看到,工作服務都啓動了自己的celery實例,並且例如日誌文件也會有所不同。這是有道理的(儘管在IMO的dotcloud文檔中沒有說得很清楚 - 文檔中提到了設置一個工作服務,但沒有說明如何將它與其他服務結合起來),但是會引發如何配置應用程序的問題python服務主要爲網頁提供服務,而Python工作服務則用於後臺任務,例如:芹菜。

dotcloud documentation daemon使得這提到:

「不過,你應該知道,當你擴展你的應用程序, 的後臺任務將在所有縮放情況安排 - 這是 可能不是你需要的!所以,在許多情況下,它仍然會更好 使用一個單獨的服務。

同樣,大量的(非職工)服務已經運行主管,所以 你可以在這些服務運行其他後臺作業。然後再次, 請記住,如果您擴展應用程序的 ,那些後臺作業將在多個實例中運行。此外,如果添加背景作業 您的Web服務,它會得到更少的資源來服務頁面,你的 性能將採取顯著的打擊。」

如何配置dotcloud &您的應用程序只運行在一個服務的網絡服務器,並在工作人員的服務後臺任務?你會通過提高芹菜的併發設置(和垂直縮放的一個服務),通過增加額外的工作人員服務,或兩者規模工?

你會怎麼做這樣,首先web服務器服務不必在處理後臺任務時使用資源,其次可以擴展工作者服務獨立於網絡服務器?

回答

2

有兩個竅門。 首先,你可以使用不同的approots爲您的www和職工服務分開的代碼就會運行:

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

其次,由於你的postinstall腳本是每個爲approot不同,您可以複製一個文件出來,成爲正確supervisord.conf用於該特定服務。

您可能還想看看django-celery的dotCloud教程和示例代碼。

/Andy