2012-10-17 33 views
1

我有一個Rails應用程序,使用Resque在多個服務器上執行後臺作業。這些工作的資源需求是不同的,所以我想限制特定類型的工作量,每個服務器都可以。我希望能夠讓多個服務器查詢相同的Redis數據庫。Resque - 在多個服務器之間均勻分配作業負載

這裏是場景: 我有服務器1和服務器2連接到相同的Redis數據庫。

1)每個服務器應該採取3個「編碼」作業和5個「分析」作業最多(總共8個作業)。

2)在給定的時刻,Redis服務器將在「編碼」隊列中有10個作業,並且在「解析」隊列中有12個作業可供Resque工作人員處理。我有2個服務器在運行,查詢同一個數據庫。

問題:如何防止Server-1採用8個「Encoding」作業,Server-2採取其餘的措施?換句話說,如何限制Server-1從「編碼」隊列中只取3個作業,從「解析」隊列中取5個作業並使Server-2執行相同的操作?

我想保持代碼的通用,這樣我可以將其部署到多個服務器,而無需單獨的調整..

回答

0

這是不是你可以或應該在Redis的水平做。您需要一位位於應用程序請求之間的超級用戶實例的主管。我很久沒有在Ruby的生產級寫任何東西,所以我不能推薦一個最喜歡的候選人,但我相信在Ruby社區會有一些東西可以滿足你的需求。

+0

你能指出這類上司的一些例子希望一樣嗎? – Stpn

0

cant與這樣

耙resque一個rake任務做到這一點(我猜):工人COUNT = 8 QUEUE = encoding_queue,parsing_queue背景= YES

但如果你能分叉的耙子任務那麼你可以

ON SERVER-1

rake resque:workers COUNT=3 QUEUE=encoding_queue BACKGROUND=yes

rake resque:workers COUNT=5 QUEUE=parsing_queue BACKGROUND=yes

重複ON SERVER-2

此幫助