天天看點

【分布式緩存之JBoss Cache】

JBoss Cache’s goal is to provide enterprise-grade clustering solutions to Java-based frameworks, application servers or custom-designed Java SE applications.

Clustering for high availability

Since JBoss Cache is a replicated cache, state is always kept in sync with other servers in the cluster.  This makes any state stored in JBoss Cache resilient to server crashes or restarts, achieving high availability.

Clustered caching to remove bottlenecks

JBoss Cache still is, as it’s name suggests, a cache.  It is a product designed to cache frequently accessed Java objects in order to dramatically improve the performance of applications.  This makes it easy to remove data access bottlenecks - such as connecting to a database. 

And unlike non-cluster-aware caches which may go out of sync when there are concurrent updates, each JBoss Cache instance is aware of remote cache updates and can either invalidate or update it’s state.

叢集高可用性

JBoss Cache将會自動複制緩存資料,并且在叢集中的伺服器之間進行緩存資料的同步,這樣可以保證任何一台伺服器重新開機了都不會影響緩存的可用性。

叢集緩存可避免系統瓶頸

JBoss Cache顧名思義是利用緩存來提高系統擴充性的,當我們的WEB系統遇到大量的資料庫讀寫時,系統的瓶頸将會出現在資料庫端,JBoss Cache正好可以解決資料庫的頻繁讀取問題,解決這個瓶頸。

另外,由于JBoss Cache的緩存是在叢集中的每一個伺服器間同步的,是以也不會因為一台緩存伺服器遇到性能問題而影響整個系統。

JBoss Cache提供兩種緩存方式:核心緩存(TreeCache)和POJO緩存(TreeCacheAOP)

核心緩存: 會直接把傳遞給它的資料存儲在一個樹型結構中。鍵/值對被存儲在樹的節點上,出于複制或持續性的需要它們都被序列化了 POJO 緩存: 則采用比較複雜的機制——利用位元組碼編織來内省(introspecting)使用者類,并向使用者類的域添加偵聽器,一旦域值有任何變化,偵聽器會立刻通知緩存。例如,如果要在POJO緩存中存儲一個龐大、複雜的對象,會導緻POJO緩存内省對象的位元組碼,最終隻把該對象的原始域存儲到樹結構中。一旦域值有所變化,緩存隻複制這個改變了的域值而不會去複制整個使用者類,這是高效的細粒度複制。

TreeCache按功能分為三類:本地(Local)Cache、複制(Replication)Cache和失效(Invalidation)Cache。 分布式Cache(複制和失效Cache)又分為兩種,同步(REPL_ASYNC)和異步(REPL_SYNC),同步

Cache是在一個Cache執行個體做修改時,等待變化應用到其它執行個體後才傳回,而異步Cache是在一個Cache執行個體做修改時,即刻傳回。

緩存模式

LOCAL - 本地,非叢集緩存。本地緩存不參與叢集,也不同叢集裡的其他緩存通信。 是以,他 們的内容也不用串行化。但是,我們推薦将他們串行化, 這樣将來的某一天想要改變緩存模式 時允許一定的靈活性。

REPL_SYNC - 同步複制。複制緩存将所有的變化複制到叢集中的其他緩存. 同步複制意味着,複制變化時,調用是阻塞的,直到收到複制确認。

REPL_ASYNC - 異步複制。與上面的 REPL_SYNC 類似, 複制緩存将所有的變化複制到叢集中的 其他緩存。 因為異步,調用者不用阻塞直到收到複制确認。

INVALIDATION_SYNC - 如果緩存配置為失效而不是複制, 每次緩存裡資料更新,叢集裡的其他 緩存将收到通知消息, 通知他們的資料已經陳舊了,應該從記憶體中驅逐。 這将減少複制的開 銷,然而仍然能夠使遠端緩存中的陳舊資料失效。

INVALIDATION_ASYNC - 象上面一樣,但是這個失效模式是用異步的方式廣播失效消息的。

繼續閱讀