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