《絲程序員如何打造日PV百萬的網(wǎng)站架構(gòu)》由會(huì)員分享,可在線閱讀,更多相關(guān)《絲程序員如何打造日PV百萬的網(wǎng)站架構(gòu)(57頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,*,*,程序員如何一個(gè)人打造日PV百萬的網(wǎng)站架構(gòu),曹力 ShiningRay,的特征,窮(買不起服務(wù)器,租不起帶寬),野心大(其實(shí)目標(biāo)是1000wPV),智商情商有限(不敢使用NB的工具和算法),有點(diǎn)小聰明,本人經(jīng)歷,2008年2011年維護(hù)過糗事百科,2011年2012年創(chuàng)辦過博聆網(wǎng),2012年至今在暴走漫畫,應(yīng)用場(chǎng)景,功能類似Blog、留言板,用戶以瀏覽為主,同一時(shí)刻大部分用戶看到的內(nèi)容大體一致,有一定的交互(投票,留言,私信),需要SEO,同時(shí),都很沒有節(jié)操和下限,Lets start,簡(jiǎn)單的算術(shù),1
2、天=86400秒,12小時(shí)=43200秒,上午9點(diǎn)至下午9點(diǎn)占90%訪問量,12小時(shí)900,000 PV20.8 PV/s,20.8PV/s 相當(dāng)于每個(gè)請(qǐng)求48毫秒,高峰時(shí)期會(huì)有25倍請(qǐng)求量,100rps,100RPS & 200ms,Rails 進(jìn)程 x 20,初始的架構(gòu),Rails,Rails,Mysql,Memcache,Nginx,Rails,Rails x 20,Nginx,一臺(tái)服務(wù)器,窮,單一服務(wù)器的問題,CPU吃緊(4核不錯(cuò)了),內(nèi)存吃緊(8G高端啊),磁盤IO吃緊(RAID真奢侈),(2009年),坑爹啊,難點(diǎn),每個(gè)頁(yè)面都需要顯示用戶信息,每個(gè)文章的頂埋數(shù)量變化非???根據(jù)觀察
3、,50%80%訪客是不登陸的,首頁(yè)等幾個(gè)頁(yè)面占了50%以上訪問量,頁(yè)面上80%內(nèi)容是不變的,剩下的主要為用戶相關(guān)信息,根據(jù)觀察,用戶關(guān)注的核心是內(nèi)容,這部分是變化少,未登錄用戶交互更少,也不關(guān)注數(shù)據(jù)的準(zhǔn)確性,有變化的部分,策略,未登錄用戶直接返回緩存內(nèi)容,分離頁(yè)面上的靜態(tài)內(nèi)容和動(dòng)態(tài)內(nèi)容,先載入相對(duì)不常變的緩存的內(nèi)容,然后加載經(jīng)常變化的內(nèi)容,Rails,Mysql,Memcache,Nginx,PageCache,瀏覽器, API放在一起實(shí)現(xiàn)(可單獨(dú)進(jìn)行優(yōu)化,參見,Build Api Services Asynchronously - 黃志敏 (flyerhzm),),簡(jiǎn)單的計(jì)算,首頁(yè)等頁(yè)面可緩
4、存的頁(yè)面占80%訪問量=80w PV,即,實(shí)際只有20w的請(qǐng)求是需要單獨(dú)處理的完整頁(yè)面,80%的用戶是非登錄用戶,80w實(shí)時(shí)數(shù)據(jù)請(qǐng)求可以被(短時(shí))緩存。,20w用戶信息的請(qǐng)求(亦可緩存),一臺(tái)服務(wù)器一天100wPV挑戰(zhàn)成功,計(jì)算有錯(cuò)誤?,不要在意細(xì)節(jié),有一天高帥富王尼瑪找到我,曹力,我們來搞一票大的吧,日訪問量1000萬PV!,日訪問量1億PV!,高帥富的開發(fā)方式,系統(tǒng)性能不夠?!,多買幾臺(tái)服務(wù)器!,我眼中的容量規(guī)劃,老板眼中的容量規(guī)劃,1臺(tái)服務(wù)器=100w PV,10臺(tái) = 10 * 100w PV = 1000w PV,100臺(tái) = 1億 PV,1億 PV = $.,Challenge1.
5、,多臺(tái)Rails服務(wù)器與緩存,caches_page的問題,只能使用文件系統(tǒng),多機(jī)共享則必須使用NFS,NFS需要進(jìn)行較多的配置、掛載,如果不進(jìn)行定期清理,文件數(shù)量會(huì)不斷增加,如果在文件數(shù)量很多,遍歷目錄進(jìn)行清理消耗時(shí)間太長(zhǎng),優(yōu)勢(shì):省內(nèi)存。,文件系統(tǒng)Memcache,Memcache的優(yōu)勢(shì),配置簡(jiǎn)單,nginx內(nèi)建對(duì)memcache后端的支持,自動(dòng)失效,SuperCache, :index,use,Rails.cache,Rails,Mysql,Nginx,MemCache,Rails,Rails,Challenge2.,緩存的橫向擴(kuò)展,nginx+,多臺(tái),memcache的問題,nginx不
6、支持使用一致性哈希來選擇memcache后端(可以使用第三方模塊),Membase to rescue,Membase特點(diǎn),完全兼容Memcached協(xié)議,橫向擴(kuò)展性極強(qiáng),任意節(jié)點(diǎn)可以讀取到全部數(shù)據(jù),GUI操作簡(jiǎn)便,高可用性,自動(dòng)故障轉(zhuǎn)移,Couchbase/Membase 控制臺(tái),Rails,Mysql,Master,Membase,Nginx,Nginx,Nginx,Membase,Membase,Rails,Rails,Rails,Rails,Rails,Mysql,Slave,Challenge3.,Dog Pile Effect,Whats Dog Pile Effect,A,Rai
7、ls,Rails,Rails,Rails,A,A,A,A,?,Rails,Rails,Rails,Rails,A,A,A,A,解決方案,Write,Through,:,不失效緩存,當(dāng)更新數(shù)據(jù)后直接更新緩存,Lock,:當(dāng)緩存對(duì)象過期時(shí),只有獲得鎖的進(jìn)程才能更新緩存,過期A,Rails,1,Rails,2,A,A,lock,無法獲取鎖,使用過期的內(nèi)容,Lock 機(jī)制,Distributed Lock實(shí)現(xiàn)方式,Memcache的原子操作,Redis的原子操作,SuperCache,super_caches_page :index,:lock = true,日1000萬PV達(dá)成!,總結(jié),使用80/20原則進(jìn)行緩存,Membase替換Memcache,使用鎖來防止Dog Pile Effect,謝謝觀賞,One More Thing,冇問題,官方許可,原糗事百科代碼開源啦,!, ShiningRay,