2011-02-25 88 views
2

我在多臺機器上運行相同的服務器端應用程序。Java應用程序複製狀態

我想提供一種將更改推送到所有應用程序的方法。我更感興趣的是對對象本身的狀態/屬性更改,而不是對文件的複製等。

所以我設想了一個管理控制檯,在那裏我會更改某些屬性,並且改變影響每個應用狀態。

我目前正在研究JGroups,這是一個可靠的多播通信工具包。在這種情況下,每個應用程序都會偵聽相同的多播組,並且管理控制檯會將更改發送到該組。

是否有其他解決方案/技術可用?

回答

5

存在很多技術,corba,rmi等等。但是如果你想要一個沒有中央服務器的完全分佈式系統,我會親自推薦JGroups

如果你有一臺中央服務器,你可以

  • 讓服務器將更改發送到所有客戶端。服務器必須直接或通過讓客戶端自行註冊來了解所有客戶端。
  • 讓客戶端輪詢服務器。
3

其他簡單的解決方案可能包括輪詢中央數據庫或中央文件。

快速谷歌搜索變成:http://www.hazelcast.com/product.jsp。看起來很有前途,但我沒有經驗。

+0

我得看看榛樹。謝謝。 – Steve 2011-02-25 12:56:28

2

來自Hadoop項目的Apache ZooKeeper可能也很有趣。我沒有這方面的經驗,但是從我的網頁上可以看出它提供了一個分層數據模型。每個對更改感興趣的應用程序都可以監視特定節點中的更改並根據更改進行操作。

http://zookeeper.apache.org/doc/trunk/index.html

3

對於更復雜的情況,我不能推薦terracotta不夠。 本質上,兵馬俑將堆的部分分發給網絡,這意味着您的應用程序共享堆的一部分。共享堆中的一個應用程序所做的更改對共享該堆的其他應用程序將可見。主要缺點是兵馬俑需要專用服務器,因爲它是一個集線器和輻條設計。