2013-08-07 149 views
5

我的要求是在羣集中共享java對象。跨羣集共享java對象

我弄糊塗

  • 是否寫一個EJB,共享整個集羣的java對象 或
  • 使用任何第三方,例如Infinispan的或memecached或赤土色或
  • 怎麼樣的JCache ?

  • 我不能任何的具體我的源代碼更改爲任意應用程序 服務器(如執行WebLogic的單服務)的約束。
  • 我無法爲羣集和非羣集環境提供兩個構建版本。
  • 性能不應降級。
  • 我正在尋找只有開源第三方,如果我需要使用它。
  • 它也需要在weblogic,Websphere,Jbos和Tomcat中工作。

任何人都可以在考慮到這些約束的情況下想出最佳選擇。

回答

0
  • 這只是一個想法。你可能想要檢查確切的實現。
  • 它會降低性能,但我不明白如何避免它。
  • 這不是一件容易的事情。可能你應該考慮負載平衡而不是集羣。

你可能會考慮RMI和/或動態代理。

  • 提取對象的接口。
  • 使用RMI訪問真實對象(從所有集羣中,即使是實際上持有對象的集羣)
  • 爲了創建您可能使用動態代理的現有代碼的RMI(再次..不確定實現)

*動態代理可以包裝任何對象,並對每個方法調用執行一些預處理和後處理任務。在這種情況下,它可能使用原始對象進行RMI調用

  • 您需要集羣之間的連接才能傳播RMI對象。
+0

是否有一個適用於所有J2EE兼容服務器的通用API?那麼JCache JSR 107呢? – Dineshkumar

2

它可以取決於您想要在羣集中共享的對象的用例。

我認爲它歸結爲真正下列選項中最複雜,最複雜的

分佈式cacheing http://www.ehcache.org

分佈式cacheing是好的,如果你需要確保的對象是可訪問從緩存在每個節點上。我已經使用Ehache進行了相當成功的分發,除非需要擴展,否則不需要安裝兵馬俑服務器,只需通過rmi指向實例即可。根據需求也可以同步和異步工作。如果節點關閉,緩存複製也很方便,所以緩存實際上是多餘的,不會丟失任何東西。如果需要確保對象已在所有節點上更新,那麼這很好。

羣集執行/數據分配 http://www.hazelcast.com/

Hazelcast也是一個很好的選擇,因爲提供在一個集羣執行Java類的方式。如果您有一個代表需要執行的工作單元的對象,並且您不太在乎它執行的位置,那麼這會更有用。

也爲分佈式集合有用的,即分佈地圖或隊列

推出自己的RMI/JGroups的

可以編寫自己的客戶機/服務器,但我想你會開始遇到問題該如果您處理的對象的要求開始變得複雜,那麼更大的框架就可以解決問題。現實Hazelcast非常簡單,應該真正消除需要推出自己的。

+0

是否有一個適用於所有J2EE兼容服務器的通用API?那麼JCache JSR 107呢? – Dineshkumar