快取: Memcached和terracotta

banq發表於2009-06-02

快取是最重要的一個方面,以提高應用程式效能的儲存物件的快取(記憶體)減少資料庫負載。

快取在群集環境中,需要分散式快取解決方案,可以支援故障切換情景和資料的可靠性。 Memcached和terracotta兵馬俑的分散式快取解決方案。

Memcached是一個高效能的分散式物件快取系統, 客戶端的API為的Perl , PHP中,python, Ruby和Java語言。 以下是一些其能力和侷限性(使用Java客戶端API ) :

要求物件是可序列化

物件標識是不保留

支援快取記憶體到期

不處理故障情景

對於一個特定物件選擇一個伺服器從池快取伺服器基於Hash的關鍵

容易配置(通過SockIOPool級)

terracotta秦始皇是一個開源基於Java的JVM叢集解決方案。 分散式快取可以實現使用兵馬俑terracotta使用java.util.HashMap或開放原始碼的快取解決方案,如EHCache , OSCache和JBoss TreeCache 。

保護物件的身份

通過有效地管理虛擬記憶體堆

宣告要求鎖定支援

簡單的配置檔案與Eclipse工具支援

良好的檔案,支援和積極發展

不需要類是可序列化

容易配置並開始!

有一個老外網友使用terracotta後(見下面連線),發現CPU高負荷和GC時間暫停導致的應用響應時間延遲是其關鍵問題。而是要Memcached後,雖然 get/set有些慢(遠端),但是相對資料庫操作,memcached和ehcache差別可以忽略。

最後,他提出:可以使用ehcache作為本地in-process快取,而memcached作為遠端快取。(物件狀態第一次訪問memcached獲取後,快取在本地ehcache中,以後就無需訪問遠端memcached,這樣方案比較優化)。

兵馬俑公司技術長阿里Zilka 認為:Memcached是因為使用非Java編寫,所以沒有GC,但他認為Memcached存在下面問題:

1. memcache分割槽是非常靜態的(除非你改變它,或自定義) 。 這可能是一個大問題,因為您的網站成長 、

2. memcache分割槽會丟失資料。 如果您重新啟動memcache伺服器,資料丟失 。

http://hankliblog.blogspot.com/2008/01/bye-bye-terracotta-other-java-caches.html

當然,terracotta或ehcache可以通過JVM引數微調來實現響應時間延遲和高吞吐量的平衡。見twitter的JVM效能優化

關於ehcache vs. memcached的2011年9月一文的最新討論,主要是從memcached分散式快取與ehcache代表資料網格之間區別方面討論:

http://www.infoq.com/news/2011/09/java-memcached-rise

[該貼被admin於2011-11-25 07:52修改過]

相關文章