2011-02-09 59 views
1

我有兩個應用程序服務器(在本例中爲Tomcat,但不一定是此容器),它們正在運行相同的應用程序,負載平衡器將工作指向他們。使用休眠與單個獨立EhCache服務器運行多個應用程序

在這些服務器的後面,我有一個數據庫,兩個服務器都希望通過Hibernate連接。我想使用EhCache緩存通用對象請求。在單個服務器設置中,這是對Hibernate使用EhCache提供程序的簡單配置更改。

但是,我不希望每個服務器都有自己的緩存,我想我想要一個兩個服務器都使用的中央緩存。

最初,我認爲這將是設置獨立EhCache服務器和指向它們的休眠配置的簡單問題。但是,我一直無法確定如何執行(如果有的話)。

我的問題是:該設置是否存在,以及如何設置它?

如果這是不可能的,是否有其他方式(或其他緩存提供程序),我在應用程序之間維護一個共同的休眠緩存?

回答

1

我不知道任何可以從多臺機器上訪問的EhCache服務器。你可能會自己寫,並且暴露例如REST API,但是您還必須實現自己的CacheRegionFactory以供Hibernate在幕後使用遠程服務器。由於網絡延遲,很多工作和結果很可能不令人滿意。

另一種方法是共享CacheManager,可以由一個JVM中的多個應用程序使用。但是由於你有幾個JVM,這不是一個選項。此外,它要求EhCache.JAR僅由父級類加載器加密一次,因爲它使用簡單的靜態字段來保存單個instance

最後,您的問題的答案是使用緩存複製或Terracotta。而兵馬俑是非常複雜的產品,EhCache緩存replication非常成熟穩定。

想法很簡單:每個服務器都有一個獨立的緩存管理器實例,但緩存管理器使用UDP和網絡廣播自動發現自己。當其中一個高速緩存發生更改時,它會傳播到其他同級。它不是非常可擴展的,但對於兩臺服務器來說它應該可以正常工作。

+0

更新 - >現在有一個EHCache獨立服務器。現在不知道如何與Grails集成 – Rafael 2015-02-18 13:45:29

相關問題