完成了上述架構(gòu)建設(shè)之后,我們的系統(tǒng)是否就已經(jīng)足夠強(qiáng)大了呢?答案當(dāng)然是否定的哈,優(yōu)化是無(wú)極限的。Web系統(tǒng)雖然表面上看,似乎比較強(qiáng)大了,但是給予用戶(hù)的體驗(yàn)卻不一定是最好的。因?yàn)闁|北的同學(xué),訪問(wèn)深圳的一個(gè)網(wǎng)站服務(wù),他還是會(huì)感到一些網(wǎng)絡(luò)距離上的慢。這個(gè)時(shí)候,我們就需要做異地部署,讓W(xué)eb系統(tǒng)離用戶(hù)更近。
一、 核心集中與節(jié)點(diǎn)分散
有玩過(guò)大型網(wǎng)游的同學(xué)都會(huì)知道,網(wǎng)游是有很多個(gè)區(qū)的,一般都是按照地域來(lái)分,例如廣東專(zhuān)區(qū),北京專(zhuān)區(qū)。如果一個(gè)在廣東的玩家,去北京專(zhuān)區(qū)玩,那么他會(huì)感覺(jué)明顯比在廣東專(zhuān)區(qū)卡。實(shí)際上,這些大區(qū)的名稱(chēng)就已經(jīng)說(shuō)明了,它的服務(wù)器所在地,所以,廣東的玩家去連接地處北京的服務(wù)器,網(wǎng)絡(luò)當(dāng)然會(huì)比較慢。
當(dāng)一個(gè)系統(tǒng)和服務(wù)足夠大的時(shí)候,就必須開(kāi)始考慮異地部署的問(wèn)題了。讓你的服務(wù),盡可能離用戶(hù)更近。我們前面已經(jīng)提到了Web的靜態(tài)資源,可以存放在CDN上,然后通過(guò)DNS/GSLB的方式,讓靜態(tài)資源的分散“全國(guó)各地”。但是,CDN只解決的靜態(tài)資源的問(wèn)題,沒(méi)有解決后端龐大的系統(tǒng)服務(wù)還只集中在某個(gè)固定城市的問(wèn)題。
這個(gè)時(shí)候,異地部署就開(kāi)始了。異地部署一般遵循:核心集中,節(jié)點(diǎn)分散。
例如,我們選擇在上海部署為核心節(jié)點(diǎn),北京,深圳,武漢,上海為分散節(jié)點(diǎn)(上海自己本身也是一個(gè)分散節(jié)點(diǎn))。我們的服務(wù)架構(gòu)如圖:?
需要補(bǔ)充一下的是,上圖中上海節(jié)點(diǎn)和核心節(jié)點(diǎn)是同處于一個(gè)機(jī)房的,其他分散節(jié)點(diǎn)各自獨(dú)立機(jī)房。?
國(guó)內(nèi)有很多大型網(wǎng)游,都是大致遵循上述架構(gòu)。它們會(huì)把數(shù)據(jù)量不大的用戶(hù)核心賬號(hào)等放在核心節(jié)點(diǎn),而大部分的網(wǎng)游數(shù)據(jù),例如裝備、任務(wù)等數(shù)據(jù)和服務(wù)放在地區(qū)節(jié)點(diǎn)里。當(dāng)然,核心節(jié)點(diǎn)和地域節(jié)點(diǎn)之間,也有緩存機(jī)制。?
二、 節(jié)點(diǎn)容災(zāi)和過(guò)載保護(hù)
節(jié)點(diǎn)容災(zāi)是指,某個(gè)節(jié)點(diǎn)如果發(fā)生故障時(shí),我們需要建立一個(gè)機(jī)制去保證服務(wù)仍然可用。毫無(wú)疑問(wèn),這里比較常見(jiàn)的容災(zāi)方式,是切換到附近城市節(jié)點(diǎn)。假如系統(tǒng)的天津節(jié)點(diǎn)發(fā)生故障,那么我們就將網(wǎng)絡(luò)流量切換到附近的北京節(jié)點(diǎn)上??紤]到負(fù)載均衡,可能需要同時(shí)將流量切換到附近的幾個(gè)地域節(jié)點(diǎn)。另一方面,核心節(jié)點(diǎn)自身也是需要自己做好容災(zāi)和備份的,核心節(jié)點(diǎn)一旦故障,就會(huì)影響全國(guó)服務(wù)。
過(guò)載保護(hù),指的是一個(gè)節(jié)點(diǎn)已經(jīng)達(dá)到最大容量,無(wú)法繼續(xù)接接受更多請(qǐng)求了,系統(tǒng)必須有一個(gè)保護(hù)的機(jī)制。一個(gè)服務(wù)已經(jīng)滿負(fù)載,還繼續(xù)接受新的請(qǐng)求,結(jié)果很可能就是宕機(jī),影響整個(gè)節(jié)點(diǎn)的服務(wù),為了至少保障大部分用戶(hù)的正常使用,過(guò)載保護(hù)是必要的。
解決過(guò)載保護(hù),一般2個(gè)方向:
更多建議: