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