1. 程式人生 > >ehcache作為分散式快取的研究

ehcache作為分散式快取的研究

ehcache支援兩種拓撲結構,一種是Distributed Caching,另一種是Replicated Caching

Distributed Caching

這和一般意義上的分散式快取非常類似,這一型別的快取是有client-server之分的,application通過client向server端請求快取資料,在server端,資料是雜湊到多個節點上的。具體而準確的拓撲結構見下圖(該圖正是Terracotta Server Array的拓撲結構,ehcache的分散式實現是依賴Terracotta Server Array實現的):


一方面:L1是客戶端結點,基於Terracotta Server Array的ehcache叢集是由L1和L2共同組成的,它們一起共享應用程式的狀態和資料。L1相當於一級快取,儲存當前應用結點上的“hot-set”資料。L1各結點上資料可能是不一樣的。

另一方面:L2作為二級快取,將儲存所有L1結點上的資料,作為所有快取資料的一份完整拷貝。在L2上,所有資料會均勻雜湊到MirrorGroup上,從而成為典型的“分散式”快取,同時,每個MirrorGroup會有一個active結點和0到多個standby(passive)結點,standby結點是active結點的備份,一單active結點當機,standby結點就將自動成為active節點,從而確保一個MirrorGroup的可靠性,也即所謂的“分割槽容錯性”(Partition Tolerance) 。

應該說,Terracotta Server Array的拓撲結構在水平伸縮和可靠性上都是非常理想的,但是非常遺憾的是,Terracotta Server Array只在商業版的ehcache中提供,換言之,開源版本的ehcache是無法實現標準意義上的“分散式快取”的。

Replicated Caching

和Distributed Cacheing相比,Replicated Caching並不具有太多的優勢,特別是在scale out方面。Replicated Caching和應用伺服器叢集的session複製非常類似,其作用僅限於確保在叢集環境下各應用結點的快取資料保持一致。ehcache的快取複製支援rmi,jms,cache server等多種方式。

初步結論

如果你需要在開源產品範圍內尋找真正的分散式快取,echache可能不是你想要到的,memcached可能是一個不錯的選擇。當然,限於時間問題,我對ehcache,特別是Replicated拓撲結構的caching研究地不是很深入,如果讀者有關於如何基於開源版本的ehcache實現分散式叢集的經驗,歡迎指正。

相關文章: