這次是Fotolog的經驗,傳說中比Flickr更大的網站,Fotolog在21台伺服器上部署了51個memcached執行個體,總計有254G緩衝空間可用,緩衝了多達175G的內容,這個數量比很多網站的資料庫都要大的多,原文是A Bunch of Great Strategies for Using Memcached and MySQL Better Together,我這裡還是選擇性的翻譯以及按照我的理解補充,感謝Todd Hoff,總能給我們一些學習的案例,從這裡也能看出國外技術的開放態度,不似我們,其實就那麼點小九九還藏著掖著,好了,進入正題。
一、關於memcached
還不知道這個?那你去面試的時候要吃虧了,趕緊去官方網站看一下http://www.danga.com/memcached/,另外google一下用法,硬碟總是太慢,把資料存在記憶體裡面吧,如果你只有一台伺服器,推薦用一下APC(Facebook在用)或者eaccelerator或者Xcache(國人開發的),這些產品單機效果更好,如果你需要分布式的緩衝方案,那麼用memcached吧。
二、memcached如何與mysql並肩作戰?
通過資料庫分區來解決資料庫寫擴充的問題把資料庫分區,部署到不同的伺服器上,免得只有一個主伺服器,寫操作成為瓶頸以及可能有的“單點故障”,一般的資料庫分區主要是按照業務來分,儘可能的拆分業務,不相干的都獨立起來做成服務也好
前 端mysql和一堆memcached伺服器來應付讀的問題應用程式首先從memcached中擷取資料,擷取不到再從資料庫中獲得並儲存在 memcached中,以前看過一篇文章說好的應用95%的資料從memcache的中獲得,3%的資料從mysql的query cache中獲得,剩下2%才去查表,對比一下你的應用,差距有多遠?
通過mysql複製(master-slave)來解決讀的問題
首先mysql資料庫通過master-slave讀寫分離,多個slave來應對應用程式讀的操作。
三、為什麼不用mysql的query cache?
我們都知道mysql有個query cache,可以緩衝上次查詢的結果,可實際上幫不上太多的忙,下面是mysql quety cache的不足:
只能有一個執行個體
意味著你能儲存內容的上限就是你伺服器的可用記憶體,一台伺服器能有多少記憶體?你又能存多少呢?
只要有寫操作,mysql的query cache就失效
只要資料庫內容稍有改變,那怕改變的是其他行,mysql的query cache也會失效
mysql的query cache只能快取資料庫資料行
意味著其他內容都不行,比如數組,比如對象,而memcached理論上可以緩衝任何內容,甚至檔案^_^