Terracotta是一款由美國Terracotta公司開發的著名開源Java集羣平臺。它在JVM與Java應用之間實現了一個專門處理集羣功能的抽象層,以其特有的增量檢測、智能定向傳送、 分佈式協做、服務器鏡像、分片等技術,容許用戶在不改變現有系統代碼的狀況下實現單機Java應用向集羣話應用的無縫遷移。使得用戶能夠專一於商業邏輯的開發, 由Terracotta負責實現高性能、高可用性、高穩定性的企業級Java集羣 . Terracotta在2009年收購了Ehcache,Terracotta致力於繼續維護Ehcache社區,並接計劃保留Ehcache繼續作爲一個基於Apache 2許可證的開源產品. 也所以Ehcache從一個緩存框架搖身一變爲一套解決方案. Terracotta也同時發佈了須要付費的Ehcache企業版本,好比針對Big Memory問題,而出現的GC 停頓時間長的問題.好比Big Memory Go 和Big Moemory Max.
java
EhCache 是一個純 Java 的進程內緩存框架,具備快速、精幹等特色,是 Hibernate 中默認的 CacheProvider。緩存
下圖是 EhCache 在應用程序中的位置:服務器
EhCache 的主要特性有:架構
快速;框架
簡單;分佈式
多種緩存策略;ide
緩存數據有兩級:內存和磁盤,所以無需擔憂容量問題;post
緩存數據會在虛擬機重啓的過程當中寫入磁盤;性能
能夠經過 RMI、可插入 API 等方式進行分佈式緩存;網站
具備緩存和緩存管理器的偵聽接口;
支持多緩存管理器實例,以及一個實例的多個緩存區域;
提供 Hibernate 的緩存實現;
EhCache 從 1.7 版本開始支持集羣, 在此以前 EhCache 是進程中的緩存系統,一旦將應用部署在集羣環境中,每個節點維護各自的緩存數據,當某個節點對緩存數據進行更新,這些更新的數據沒法在其它節點中共享, 這不只會下降節點運行的效率,並且會致使數據不一樣步的狀況發生。例如某個網站採用 A、B 兩個節點做爲集羣部署,當 A 節點的緩存更新後,而 B 節點緩存還沒有更新就可能出現用戶在瀏覽頁面的時候,一會是更新後的數據,一會是還沒有更新的數據,儘管咱們也能夠經過 Session Sticky 技術來將用戶鎖定在某個節點上,但對於一些交互性比較強或者是非 Web 方式的系統來講,Session Sticky 顯然不太適合。因此就須要用到 EhCache 的集羣解決方案。目前EhCache支持五種集羣方案,分別是:
Terracotta
RMI
JMS
JGroups
EhCache Server
分佈式Terracotta由運行中的Ehcache和一系列的Terracotta Server(TSA)組成. 分佈式Terracotta從邏輯上分爲兩層L1和L2, L1指使用Ehcache的App Server. L2充當L1的replication數據, 存放L1上Ehcache上數據的徹底備份. L1存放常常使用的數據, 萬一L1中一個App Server Crash後, 重啓動後,能夠從L2 TSA pull以前緩存的數據. 從而保證它的High Available.
在實際應用中,每個App Server須要引用Ehcache的library,並配置相應TSA的IP和端口. 每一個Ehcache基於在一個JVM上,並負責維持和遠程TSA的通訊. 從某種角度,咱們理解TSA至關於Ehcache的一個遠程鏡像.
分佈式Terracotta採分層的內存管理模型.
L1: 支持Heap Store和BigMemory(off-heap,內存直接存儲).
L2:支持Heap Store, BigMemory and Local Disk Store.
這裏主要介紹Terracotta , 其它的四種方式,你們若是感興趣, 推薦另外一篇blog: http://www.ibm.com/developerworks/cn/java/j-lo-ehcache/
[Reference]:
http://www.oschina.net/p/ehcache
http://ehcache.org/documentation/2.4/terracotta/architecture
http://forums.terracotta.org/forums/posts/list/2413.page
Big Memory : http://ehcache.org/documentation/bigmemory/index