2017-09-27 145 views
0

我有多個vms運行項目中的所有模塊。每個由用戶創建的請求都必須由所有模塊處理,但只需要完成一次。因此,如果VM1接收到請求,則模塊1可以部分處理該請求,但下一個VM1或VM2或羣集中的任何其他VM可以接收並處理模塊2。等等。負載平衡在羣集中運行的Java應用程序

由於每個虛擬機的容量有限,我希望使用負載平衡器在單個虛擬機之間分配工作。

是否有負載平衡器(開放源碼的Java)可以解決這個問題,或者我需要使用多個負載均衡算法(循環,加權等)來解決我的需求?

編輯1:

每個模塊是Java類,這是獨立於本身,但需要前面的模塊其started.Each Vm的收聽消息總線之前完成。當總線上出現一條消息時,任何一個虛擬機都可以拿起並開始處理它。

回答

0

您可以試試HAProxy(TCP/HTTP負載均衡),它是開源的,功能豐富且應用相當廣泛。除了良好的文檔,你可以找到許多可用的信息。

+0

它不是一個處理http請求的web應用程序。所以這可能沒有幫助 –

+0

好的,那麼通信或消息傳遞的模式是什麼。 – Shailendra

+0

每個Vm正在收聽消息總線。當總線上出現一條消息時,任何一個虛擬機都可以拿起並開始處理它。 –

0

根據您嘗試並行化問題的確切語義,您可能會通過將問題分塊爲某些大小的「工作包」並將它們保留在中央隊列中,從而獲得良好結果。然後,只要每個虛擬機完成前一個數據包就輪詢來自所述隊列的數據包。這被稱爲自我調度。

+0

聽起來像我需要的。你能指出我使用這種架構的某些材料嗎? –

+0

我不知道實施這種方法的任何通用解決方案,對不起。這個原則通常很簡單,可以推出自定義解決方案。 – Felk

+0

另外,根據您的問題和規模,擁有這樣一個集中的隊列可能會成爲瓶頸 – Felk