Ehcache還是Memcached的抉擇(二)

 

Liferay中使用的是Ehcache, 這個緩存框架不錯,性能很好(參見上篇與memcached對比的文章),在Liferay中封裝的也不錯,很容易使用。

可最近在項目中遇到一個問題,那就是需要有多個系統共同訪問某個(某些)數據表,這種需求在一些與遺留系統進行整合的項目中也經常會有。整合是沒有問題,但是在這種情況下,緩存就成了一個很大的問題。

大家都知道,緩存有三個作用範圍:事務、應用、集羣。事務級緩存在session中有效;應用級緩存在多個session中可共享,因此儘可能只在read only型應用中使用,而集羣緩存就需要在各個節點上進行緩存同步(Ehcache方案)。

但是這些都是在同一個應用的前提條件下的,如果是多個應用在數據層整合,那麼任何一個範圍都有可能出現問題。尤其是Ehcache,是一個in process的緩存方案,受Spring管理,每個Web App的緩存相互獨立(拋開ClassLoader Share),基本上不可能實現多應用緩存共享。即使使用消息中間件進行監聽,也不是一個完美的解決方案。

那麼回過頭來,再看看曾經被我拋棄的memcached。

因爲是Client/Server結構的,通過採用二級hash算法進行緩存服務器分配、緩存數據的讀寫;整個緩存體系中,一個key對應的value只保存在惟一的一個服務器上;而且,memcached server是deamon方式運行的,因此無論對於什麼應用,只要用相同的memcached client進行配置,就能共享緩存。

怪不得很多大網站都在使用這個緩存框架,雖然其絕對性能要比ehcache慢。

看來,需要將Liferay MDD的緩存也轉到memcached上了。簡單估計了一下,工作量應該不大,爭取這周搞定;

另外,在Ehcache的計劃中,1.6版本也會採用與memcached類似的Cache Server方式來實現分佈式緩存了。

等不急了,先倒向Memcached吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章