memcached應用場景(轉)


 memcached最吸引人的地方主要在於它的分布式。分布式對於互聯網應用來講,按照用途基本上可划分為三種方式:分布式計算、分布式存儲和兩者兼而有之。memcached是分布式存儲的一種。我們常見的分布式存儲大多數是將N台設備(server或者單獨的存儲)構建成盤陣,而memcached旨在構建一個高速的內存池。更通俗一點來講:分布式計算是將N顆cpu組裝成一顆cpu,分布式慢速存儲是將N個硬盤組裝成一個大硬盤,memcached是將N塊內存組裝成一塊大內存。
  
    有個朋友問:那是不是代價很昂貴啊。我的回答是肯定的。如果你的網站規模只有三兩台服務器的話,我覺得你就不用考慮這樣的方案了,等你的網站做大了以后,再參考這方面的資料即可。一般都是比較大的互聯網公司為了追求更好的用戶體驗,才進行這方面的投資,對他們來講,用戶體驗至上,money是小case。
還有朋友問:有一些dbms提供內存表的功能,比如mysql的內存表,可以代替memcached。但我要建議你的是:mysql的內存表確實起到同樣的作用,但它的局限也很多,往往不能讓你隨心所欲,所以建議你不要走彎路。


memcached的應用場景

 
應用范圍
 
    memcached產品或相關技術的應用,我們在前面已經提到了一些。其實它的應用還是非常普遍的,應用作為廣泛的領域:例如sns類網站、blog類網站、bbs類網站以及im后台服務。
  
 sns類網站的應用
    livejournal.com是99年始於校園中的項目,有點像中國的校內網。幾個學生純屬出於愛好做了這樣一個網站,主要實現以下功能: sns、blog、bbs和rss等。livejournal從建立開始就采用了大量的開源軟件,到現在它本身也衍生了不少開源軟件。 sns網站,現在比比皆是,規模比較大的象開心、校內、51,它們的頁面上往往需要引用大量的用戶信息、好友信息以及文章信息等,所以跨表或跨庫操作會相當多。如果這些功能全部直接操作數據庫,顯然會帶來極大的效率損耗和系統負載。memcached在這樣的場景下就會發揮巨大的作用,它采用大內存把這些不變的數據全都緩存起來,當數據修改時就通知cache過期,這樣應用層基本上就可以解決大部分問題了,只有很小一部分請求穿透應用層,用到數據庫。
 
 blog、bbs類網站的應用
   象blog.sina.com.cn這些流量巨大的blog系統,它需要頻繁讀寫的一些小數據。其中最典型的應用,我們通常成為“數字類服務”,比如blog中需要實時顯示的用戶點擊數和閱讀數,bbs中需要記錄的在線人數、在線用戶等。這些小數據的處理非常繁瑣,你無論怎么去設計數據庫,都很難避開跨表或者跨庫。有的朋友會說,可以在數據庫中增加冗余字段解決這類問題,但事實上,這既不符合數據庫設計的范式規則,也很難做到數據的一致性,由此會引發更為復雜的問題。而且由於產品線的分散發展,數據已經很難做到完全的統一規划。memcached在這樣的場景下就會將這些小數據進行緩存,定期持久化就可以了,查詢操作一直都在內存中運行。說到這里,有的朋友又會想到一些其它的問題:“memcached server宕機了怎么辦,怎么保證與數據庫的數據一致”。我會對你說:“你的問題非常好,我們將會在后面章節給出相應的解決方案”。另外,其實這種小數據並不是關鍵性數據,即使偶爾發生點錯誤,也沒太大的問題。blog、bbs系統並不是嚴格的企業級系統,假如你是為銀行業務提供解決方案的話,memcached並不適合。
 
 im server的應用
   前些時間, 有一些文章介紹memcached 在Jabber上應用。寫累了,喝口水,讀者自己去找找資料吧,有時間的話,幫我補上吧,呵呵。

   我們舉了幾個例子來說明memcached的應用場景,似乎都局限於小數據服務,那是不是就不能用於較大數據的緩沖了?那絕不是,memcached能夠用來存儲各種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等等,而且生產環境中就這么跑過,只不過讓大數據量使用緩沖的話,有點太浪費了,同樣數量的內存存不了幾條數據,所以會明顯的降低命中率。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM