程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> memcached在大負載高並發網站上的應用(二)---應用場景

memcached在大負載高並發網站上的應用(二)---應用場景

編輯:關於JAVA

寫這篇文章之前,我也特意跟以前的同事做了一些交流,在此感謝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能夠用來存儲各 種格式的數據,包括圖像、視頻、文件以及數據庫檢索的結果等等,而且生產環 境中就這麼跑過,只不過讓大數據量使用緩沖的話,有點太浪費了,同樣數量的 內存存不了幾條數據,所以會明顯的降低命中率。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved