memcached在大負載高併發網站上的應用(2)

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

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

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

本文出自 “網站架構之家” 博客,請務必保留此出處http://wangzebin.blog.51cto.com/653300/128235

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