<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

    最近一直在學(xué)習(xí)大型網(wǎng)站的架構(gòu)和性能優(yōu)化,瘋狂地從網(wǎng)上尋找各種可能的架構(gòu)資料,終于在InfoQ上找到2009 QCon舉辦的QCon全球企業(yè)開(kāi)發(fā)大會(huì)北京站演講資料。

    挑了我最喜歡的幾個(gè)大型網(wǎng)站(豆瓣、淘寶、優(yōu)酷),先看了豆瓣的主講人洪強(qiáng)寧分享的《豆瓣網(wǎng)技術(shù)架構(gòu)變遷》。看完后有幾個(gè)感覺(jué):

     ※ 羅馬不是一天建成的

    豆瓣在5年內(nèi)經(jīng)歷了6次架構(gòu)的調(diào)整,和淘寶有得一拼啊。任何優(yōu)秀的架構(gòu)都是在不斷的問(wèn)題和瓶頸中發(fā)展起來(lái)的

     ※ 總是考慮使用Memcached

    應(yīng)該在系統(tǒng)架構(gòu)的第一時(shí)間就考慮使用Memcached,按照洪大師的說(shuō)法。豆瓣現(xiàn)在的內(nèi)存緩存有38G。Memcached的好處地球人都知道了

     ※提防Memcached的并發(fā)訪問(wèn)

    Memcached雖然是劑猛藥,但也有可 能成為毒藥。特別是在高并發(fā)的情況下同時(shí)獲取一批緩存數(shù)據(jù)的時(shí)候(不知道新版本的Memcached解決這個(gè)問(wèn)題沒(méi)有,當(dāng)時(shí)我第一次看到這個(gè)功能時(shí)那是激 動(dòng)得內(nèi)牛滿面啊~~~)。要知道Memcached畢竟只是個(gè)緩存工具,不是內(nèi)存數(shù)據(jù)庫(kù)。不要指望他提供什么鎖、并發(fā)控制的機(jī)制(不過(guò)它倒是提供了一個(gè)原 子操作increment,用于遞增數(shù)據(jù),對(duì)于刷新頁(yè)面訪問(wèn)量之類的比較有用)

     ※ 根據(jù)數(shù)據(jù)訪問(wèn)特性合理規(guī)劃表類型

    使用MySQL的數(shù)據(jù)庫(kù),可以方便地使用不 同的存儲(chǔ)引擎對(duì)應(yīng)不同操作類型的表(貌似對(duì)于其它數(shù)據(jù)庫(kù),還沒(méi)有這種功能。也可能是我孤陋寡聞了)。對(duì)于讀寫(xiě)不平衡但并發(fā)低的情況,采用MyISAM可以 獲得較高的效率。網(wǎng)上google了一把,ISAM的意思是Indexed Sequential Access Method (有索引的順序訪問(wèn)方法),它的優(yōu)勢(shì)是速度快,支持全文搜索;但對(duì)事務(wù)支持差(PS:個(gè)人意見(jiàn)這個(gè)用來(lái)做數(shù)據(jù)分析或者數(shù)據(jù)挖掘最好了 ^_^)。如果是用于高并發(fā)的讀寫(xiě)訪問(wèn),那么只能采用InnoDB類型的表了。

     ※ 動(dòng)靜分離

    使用lighttpd具有比Apache更好的靜態(tài)文件處理功能(PS:個(gè)人見(jiàn)到從豆瓣的第一個(gè)版本開(kāi)始到目前為止的版本,只有兩點(diǎn)是不變的:1.使用lighttpd對(duì)精通文件進(jìn)行分離,直接從FS讀取。動(dòng)態(tài)的走SCGI接口。2.使用Memcached)。

     ※ 對(duì)緩存、數(shù)據(jù)庫(kù)進(jìn)行負(fù)載均衡,例如MySQL Proxy

    使用類似于Load Balance來(lái)平衡Memcached的負(fù)載。不同于Round-robin方式,采用的是hash分配。自己實(shí)現(xiàn)Hash算法(PS:這個(gè)倒是和網(wǎng)上 的多數(shù)觀點(diǎn)一樣,但緩存的東西多了,命中率總是會(huì)下降,要么擴(kuò)大內(nèi)存要么改算法,避免多次的重新分配)

     ※ 不要忽視小文件的讀寫(xiě)

    在豆瓣的某個(gè)發(fā)展階段,就出現(xiàn)了因?yàn)榇罅康男D片讀寫(xiě)而造成大量的磁盤IO和碎片的問(wèn)題。原來(lái)豆瓣一開(kāi)始也是把所有圖片都放在一個(gè)目錄下啊(),后來(lái)出現(xiàn)問(wèn)題后才改成1000個(gè)圖片一個(gè)目錄。要不按照洪大師的說(shuō)法:一個(gè)ls就可以讓服務(wù)器掛掉。

     ※  屏蔽表名和物理表的關(guān)系

    通過(guò)中間映射實(shí)現(xiàn)底層物理數(shù)據(jù)表的無(wú)縫遷移。(PS:這個(gè)只要是做過(guò)Java的都知道了,IoC,代理其實(shí)也就是這個(gè)作用),具體的做法就是只傳一個(gè)邏輯表名進(jìn)去,后臺(tái)函數(shù)映射后解析成一個(gè)真正的物理表所在的位置,方便日后的數(shù)據(jù)遷移,只要維護(hù)這個(gè)映射表就好了

     ※ 數(shù)據(jù)復(fù)制(主從模式)是必經(jīng)階段

     當(dāng)主數(shù)據(jù)庫(kù)出現(xiàn)瓶頸時(shí),要考慮采用數(shù)據(jù)庫(kù) 復(fù)制的方式(Master / Slave模式),主庫(kù)負(fù)責(zé)事務(wù)性讀寫(xiě),從庫(kù)負(fù)責(zé)非事務(wù)性讀(不能有寫(xiě))。數(shù)據(jù)庫(kù)復(fù)制的形式在豆瓣的發(fā)展上發(fā)生了很多次變化,我看到的就有從單點(diǎn)的復(fù)制到 最終的跨機(jī)房復(fù)制。這一點(diǎn)可以從后面的PPT看到

     ※ 數(shù)據(jù)庫(kù)復(fù)制是存在時(shí)間延遲的

    數(shù)據(jù)庫(kù)復(fù)制的延遲時(shí)間要考慮在內(nèi),否則會(huì)出現(xiàn)當(dāng)主庫(kù)寫(xiě)完后,未來(lái)得及復(fù)制到從庫(kù)就出現(xiàn)Application從從庫(kù)讀數(shù)據(jù)的情況,嚴(yán)重的話用戶每次更新數(shù)據(jù)后再刷新看到的永遠(yuǎn)都是舊的數(shù)據(jù)(緩存還沒(méi)有更新,同步的數(shù)據(jù)還在路上呢....)。


     ※ 人肉刷新緩存有時(shí)候是必要的

    接上面的問(wèn)題,洪大師的團(tuán)隊(duì)最終采用了“人肉刷新”---- 即在可預(yù)見(jiàn)的情況下,內(nèi)存中的數(shù)據(jù)更新后,主動(dòng)調(diào)用Memcached的flush()方法刷新一下緩存,先同步了緩存再說(shuō),后面的數(shù)據(jù)你就慢慢復(fù)制吧。這個(gè)只能靠程序員自己控制了....ORZ

     ※ 統(tǒng)一的Data mining入口

    豆瓣的數(shù)據(jù)庫(kù)復(fù)制機(jī)制中有一個(gè)特別的“Data mining”模塊,由它負(fù)責(zé)把數(shù)據(jù)寫(xiě)到主DB,再?gòu)闹鱀B replicate到從DB,然后Data mining模塊從從DB read。這個(gè)有點(diǎn)搞不懂?這個(gè)“Data mining”到底是什么來(lái)頭?怎么所有數(shù)據(jù)都從這里寫(xiě),甚至連主DB的數(shù)據(jù)都是從這里寫(xiě)進(jìn)去的?

     ※ 分離服務(wù)器

    把服務(wù)器分成控制服務(wù)器、應(yīng)用服務(wù)器、代理服務(wù)器。分別對(duì)應(yīng)入口轉(zhuǎn)發(fā),應(yīng)用請(qǐng)求,負(fù)載均衡。把數(shù)據(jù)挖掘、日志分析、爬蟲(chóng)應(yīng)用之類占用帶寬,耗內(nèi)存的東西全都移到后端,放在月黑風(fēng)高,夜深人靜的時(shí)候去進(jìn)行吧。

     ※ 硬件的故障不可忽視

    SCSI比SATA的穩(wěn)定性要高,花在內(nèi)存上的錢是值得的

     ※ 永遠(yuǎn)不要高估機(jī)房托管方、空間提供商的智商和責(zé)任心

    比如洪大師說(shuō)的:搬機(jī)器的時(shí)候不小心把你們服務(wù)器的電源線拔了之類的問(wèn)題...

     ※ 如果你夠牛B,那么考慮實(shí)現(xiàn)自己的內(nèi)存數(shù)據(jù)庫(kù)和文件系統(tǒng)

    例如DoubanFS、DoubanDB(貌似這是一個(gè)基于key-value的內(nèi)存數(shù)據(jù)庫(kù),看來(lái)內(nèi)存數(shù)據(jù)庫(kù)在未來(lái)大有可為啊,該死的hibernate,該死的iBatis,該死的OR-Mapping)。

    以上是豆瓣洪大師的觀點(diǎn),加上最近看到的其它,也一并總結(jié)一下吧:

     
    ※ 盡可能在長(zhǎng)事務(wù)的情況下使用異步通信,例如發(fā)送SMS、MMS到網(wǎng)關(guān)然后等待回應(yīng)

     ※ 對(duì)數(shù)據(jù)庫(kù)采用水平分區(qū)而非垂直分區(qū)以加強(qiáng)后期的擴(kuò)展性

     ※ 合理恰當(dāng)?shù)厥褂盟饕?br />
     ※ 在高層次的地方使用緩存,而不要在低層次的地方使用緩存

     
    ※ 建立科學(xué)合理的性能、壓力測(cè)試環(huán)境。性能瓶頸總是出現(xiàn)在你意想不到的地方



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2010-03-19 22:21 Paul Lin 閱讀(1527) 評(píng)論(0)  編輯  收藏 所屬分類: 架構(gòu)與性能
    <2010年3月>
    28123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区香蕉| 全免费a级毛片免费**视频| 国产精品亚洲美女久久久| 亚洲国产成人精品无码区二本| 国产成人精品免费视| 91亚洲精品自在在线观看| 中文免费观看视频网站| 亚洲乱码日产精品BD在线观看| 免费无码精品黄AV电影| 亚洲精品精华液一区二区| 日本免费电影一区| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 久久精品免费网站网| 中文字幕亚洲无线码| 91成人免费福利网站在线| 午夜网站免费版在线观看| 青青青亚洲精品国产| 国产做床爱无遮挡免费视频| 国产亚洲精彩视频| 亚洲日韩涩涩成人午夜私人影院| 9久热这里只有精品免费| 亚洲一区二区三区在线网站| 亚洲最新永久在线观看| 国产免费女女脚奴视频网| 亚洲а∨精品天堂在线| 红杏亚洲影院一区二区三区| 全免费a级毛片免费看| 国产色在线|亚洲| 亚洲?v女人的天堂在线观看| 三上悠亚在线观看免费| 亚洲日本乱码一区二区在线二产线| 成人毛片免费播放| 国产va免费精品| 亚洲乱码一区av春药高潮| 亚洲国产成人久久综合野外| 久久成人免费大片| 亚洲精品乱码久久久久久V| 亚洲精品二区国产综合野狼| 久九九精品免费视频| 国产黄片不卡免费| 亚洲最大视频网站|