異地部署(地理分布式)

2018-02-24 15:45 更新

異地部署(地理分布式)

完成了上述架構(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)分散。

  • 核心集中:實(shí)際部署過(guò)程中,總有一部分的數(shù)據(jù)和服務(wù)存在不可部署多套,或者部署多套成本巨大。而對(duì)于這些服務(wù)和數(shù)據(jù),就仍然維持一套,而部署地點(diǎn)選擇一個(gè)地域比較中心的地方,通過(guò)網(wǎng)絡(luò)內(nèi)部專(zhuān)線來(lái)和各個(gè)節(jié)點(diǎn)通訊。
  • 節(jié)點(diǎn)分散:將一些服務(wù)部署為多套,分布在各個(gè)城市節(jié)點(diǎn),讓用戶(hù)請(qǐng)求盡可能選擇近的節(jié)點(diǎn)訪問(wèn)服務(wù)。

例如,我們選擇在上海部署為核心節(jié)點(diǎn),北京,深圳,武漢,上海為分散節(jié)點(diǎn)(上海自己本身也是一個(gè)分散節(jié)點(diǎn))。我們的服務(wù)架構(gòu)如圖:?

億級(jí)Web系統(tǒng)搭建——單機(jī)到分布式集群 - hansionxu - 技術(shù)的天空?

需要補(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è)方向:

  • 拒絕服務(wù),檢測(cè)到滿負(fù)載之后,就不再接受新的連接請(qǐng)求。例如網(wǎng)游登入中的排隊(duì)。
  • 分流到其他節(jié)點(diǎn)。這種的話,系統(tǒng)實(shí)現(xiàn)更為復(fù)雜,又涉及到負(fù)載均衡的問(wèn)題。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)