2012-04-11 116 views
0

我有一個創建了大量就業機會的應用程序,我希望能夠處理多個服務器上,這些工作分配負載分配工作負載作業隊列

每個任務都有一個類別,並在所有工作一個類別進入一個特殊的順序,所以如果與類別A相關的工作j1在工作j2之前也與類別A相關,那麼j1必須在j2之前處理,但是與類別B相關的工作j3可以在兩者之間進行處理。

我有一個如何實現這個兩個想法:

  1. 製作一個隊列的所有作業,並有幾個工人從這個隊列中拉出。當一個工人抽出一個與A類有關的工作時,它必須鎖定與A類有關的工作,所以沒有其他人開始處理這些工作。它會在完成後釋放鎖。

  2. 爲每個類別設置一個隊列,然後告訴工作人員從哪個隊列中抽取。如果只有一名工人負責類別隊列,則不必鎖定它。一名工人可能會負責許多隊列。

我想用一個隊列,並沒有指定特殊隊列每個工人的想法,但我不喜歡執行某種信號的每個類別的想法。

到目前爲止,我已經使用Redis進行排隊,取得了巨大的成功,但我已經開始研究具有更多模式的zeromq,可能可以幫助我。

這樣做的最好方法是什麼?你推薦什麼工具/庫?

回答

0

您可以嘗試使用Gearman

的Gearman提供了一個通用的應用程序框架的工作外包給其他 機或更適合做的工作流程。它允許您並行執行工作,以執行負載平衡處理,並且可以在語言之間調用函數 。它可用於各種從高可用性網站到傳輸數據庫複製事件的各種 應用程序。

它可以讓你分發服務器之間的工作負載(以及從案例研究閱讀,看起來是善於發現),也允許您設置任務的優先級高/低/正常,你可能使用(如果我正確理解您的案例)確保作業按照它們應該的順序處理。