Memcached是什麼?

日期:2008-06-20  作者:喜騰小二

Memcached是高效能的,分散式的記憶體物件快取係統,用於在動態應用中減少資料庫負載,提昇訪問速度。
Memcached由Danga Interactive開發,用於提昇LiveJournal.com訪問速度的。LJ每秒動態页面訪問量幾韆次,使用者700萬。Memcached將資料庫負載大幅度降低,更好的分配資源,更快速訪問。


為什麼不使用資料庫做這些?

暫且不考慮使用什麼樣的資料庫(MS-SQL, Oracle, Postgres, MysQL-InnoDB, etc..), 實現事務(ACID,Atomicity, Consistency, Isolation, and Durability )需要大量開銷,特別當使用到硬碟的時候,這就意味着查詢可能會阻塞。當使用不包含事務的資料庫(例如Mysql-MyISAM ),上麵的開銷不存在,但讀執行緒又可能會被寫執行緒阻塞。
Memcached從不阻塞,速度非常快。

為什麼不使用共用記憶體?
最初的快取做法是在執行緒內對物件進行快取,但這樣處理序間就無法共用快取,命中率非常低,導緻快取效率極低。後來出現了共用記憶體的快取,多個處理序或者執行緒共用同一塊快取,但畢竟還是隻能侷限在一臺機器上,多臺機器做相同的快取同樣是一種資源的浪費,而且命中率也比較低。
Memcached Server和Clients共同工作,實現跨伺服器分散式的全域的快取。並且可以與Web Server共同工作,Web Server對CPU要求高,對記憶體要求低,Memcached Server對CPU要求低,對記憶體要求高,所以可以搭配使用。

Mysql 4.x的快取怎麼樣?
Mysql查詢快取不是很理想,因為以下幾點:
當指定的表發生更新後,查詢快取會被清空。在一個大負載的係統上這樣的事情發生的非常頻繁,導緻查詢快取效率非常低,有的情況下甚至還不如不開,因為它對cache的管理還是會有開銷。
在32位元機器上,Mysql對記憶體的操作還是被限制在4G以內,但memcached可以分佈開,記憶體規模理論上不受限制。
Mysql上的是查詢快取,而不是物件快取,如果在查詢後還需要大量其它操作,查詢快取就幫不上忙了。
如果要快取的資料不大,並且查詢的不是非常頻繁,這樣的情況下可以用Mysql 查詢快取,不然的話memcached更好。

資料庫同步怎麼樣?
這裡的資料庫同步是指的類似Mysql Master-Slave模式的靠日誌同步實現資料庫同步的機制。
妳可以分佈讀操作,但無法分佈寫操作,但寫操作的同步需要消耗大量的資源,而且這個開銷是隨着slave伺服器的增長而不斷增長的。
下一步是要對資料庫進行水平切分,從而讓不同的資料分佈到不同的資料庫伺服器組上,從而實現分佈的讀寫,這需要在應用中實現根據不同的資料連線不同的資料庫。
當這一模式工作後(我們也推薦這樣做),更多的資料庫導緻更多的讓人頭疼的硬體錯誤。
Memcached可以有效的降低對資料庫的訪問,讓資料庫用主要的精力來做不頻繁的寫操作,而這是資料庫自己控制的,很少會自己阻塞 自己。

Memcached快嗎?

非常快,它使用libevent,可以應付任意數量開啟的連線(使用epoll,而非poll),使用非阻塞網路IO,分散式雜湊物件到不同的伺服器,查詢復雜度是O(1)。

<<<返回新聞中心

技術文章

站內新聞

我要啦免费统计