作者 | 郭冠華,單位:中國(guó)移動(dòng)智慧家庭運(yùn)營(yíng)中心
?Labs 導(dǎo)讀服務(wù)的可用性就是網(wǎng)絡(luò)的平均無(wú)故障率。對(duì)于一個(gè)平臺(tái)來(lái)講,這是非常重要的指標(biāo)之一。當(dāng)前主要使用的可用率為4個(gè)9,即99.99%。也意味著每年最多只能有52分鐘的故障時(shí)間。
(資料圖片僅供參考)
雖然通過(guò)負(fù)載均衡等方式,可以應(yīng)對(duì)單節(jié)點(diǎn)故障。但當(dāng)出現(xiàn)小概率不可抗力的時(shí)候(自然災(zāi)害、停電、挖斷光纜等情況),整個(gè)機(jī)房不可用的情況依然會(huì)出現(xiàn)。近年來(lái),支付寶、微博、B站等均出現(xiàn)過(guò)機(jī)房級(jí)的故障,因此一個(gè)或者多個(gè)便于快速切換的機(jī)房就成了backup(備用)。同時(shí),多活的一個(gè)次要條件就是可以部署在不同的位置,通過(guò)物理上的距離減少,來(lái)提升響應(yīng)速度。分機(jī)房部署也可以大大地減少單機(jī)房資源的需求。
Part 02 同城備份還是同城雙活?同城進(jìn)行部署服務(wù)的最大好處就是機(jī)房空間距離小,通過(guò)專線進(jìn)行連接,機(jī)房間時(shí)延可以穩(wěn)定到3ms以內(nèi),因此服務(wù)可以跨機(jī)房訪問(wèn)數(shù)據(jù)。
于是,最簡(jiǎn)單的雙活方式如下:我們可以稱之為同城備份,數(shù)據(jù)庫(kù)放在機(jī)房A,并定期將數(shù)據(jù)庫(kù)內(nèi)數(shù)據(jù)同步至機(jī)房B。好處是實(shí)現(xiàn)簡(jiǎn)單、方便橫向的服務(wù)拓展。如果發(fā)生機(jī)房級(jí)別的災(zāi)害,可以盡快從機(jī)房B將數(shù)據(jù)恢復(fù)。但是問(wèn)題也出在這里:機(jī)房B并沒(méi)有數(shù)據(jù)庫(kù),無(wú)法完全接替機(jī)房A的作用。
圖一 同城備份
為了解決上述的問(wèn)題,可以在機(jī)房B內(nèi)放置數(shù)據(jù)庫(kù)從庫(kù),并將機(jī)房A的數(shù)據(jù)實(shí)時(shí)同步到機(jī)房B:即A機(jī)房中的數(shù)據(jù)庫(kù)為主庫(kù),機(jī)房B中為從庫(kù)。若發(fā)生機(jī)房A故障,則可以將流量切到B機(jī)房,并停止實(shí)時(shí)同步,把機(jī)房B中的數(shù)據(jù)庫(kù)置為主庫(kù)。
圖二 同城同步
該機(jī)房的主要問(wèn)題是需要人工干預(yù)較多。除了數(shù)據(jù)庫(kù)和DNS的切換之外,還需要修改大量數(shù)據(jù)庫(kù)的配置。總體上,該架構(gòu)可以以較快時(shí)間恢復(fù)服務(wù),對(duì)于同城的多機(jī)房,已經(jīng)足夠。
Part 03 異地多活的新問(wèn)題異地多活不同于同城的情況,首先就是機(jī)房間哪怕使用專線,延時(shí)的問(wèn)題也無(wú)法解決(想要異地訪問(wèn)數(shù)據(jù)庫(kù)幾乎不可能)。
首先我們想到的是,有沒(méi)有一種方法可以盡量避免信息的同步?那就是下圖的方式:通過(guò)地理、用戶哈希、設(shè)備id哈希等方式,將請(qǐng)求在DNS層分流到多個(gè)機(jī)房。每個(gè)機(jī)房處理固定用戶請(qǐng)求,從而可以將兩個(gè)機(jī)房間數(shù)據(jù)同步減少到最少,也將每個(gè)機(jī)房的數(shù)據(jù)量減少到最少的量。但是數(shù)據(jù)同步只能靠業(yè)務(wù)進(jìn)行同步,而不是數(shù)據(jù)庫(kù)工具進(jìn)行同步。
分治的方式看起來(lái)很理想,但實(shí)際上也會(huì)有其他的問(wèn)題。比如,使用地理方式進(jìn)行劃分(即使用ip進(jìn)行劃分)的方案,用戶位置發(fā)生變化導(dǎo)致請(qǐng)求到其他機(jī)房,如何進(jìn)行數(shù)據(jù)同步?使用用戶id哈希進(jìn)行分片的方案,需要進(jìn)行橫向擴(kuò)容時(shí),舊數(shù)據(jù)如何處理?發(fā)生故障時(shí),其他機(jī)房如何短時(shí)間內(nèi)同步其他分片數(shù)據(jù)等等。
總之,分片方式并非是完美的解決方法。
圖三 異地雙活
Part 04 異地同步數(shù)據(jù)到這里,我們已經(jīng)發(fā)現(xiàn)了,多個(gè)機(jī)房間的數(shù)據(jù)一定是需要同步的,這是異地多機(jī)房的必由之路。
數(shù)據(jù)的同步方式可以通過(guò)業(yè)務(wù)方式,也可以通過(guò)數(shù)據(jù)庫(kù)中間件進(jìn)行。下圖中的方式就是機(jī)房間進(jìn)行同步,這種方式確實(shí)增大了業(yè)務(wù)的復(fù)雜性,并且會(huì)隨著機(jī)房的拓展,機(jī)房間同步的情況會(huì)更加復(fù)雜。
圖四 網(wǎng)狀同步
在上述的架構(gòu)中,如果設(shè)置一個(gè)中心的數(shù)據(jù)節(jié)點(diǎn),所有機(jī)房通過(guò)中心數(shù)據(jù)節(jié)點(diǎn)來(lái)進(jìn)行同步,數(shù)據(jù)流就會(huì)從“網(wǎng)狀”變成“星狀”。大大減少同步工作和復(fù)雜性。但是這一方案,實(shí)質(zhì)上是與我們追求的分布式部署理念的一種背離。
圖五 網(wǎng)狀星狀同步
Part 05 分布式數(shù)據(jù)庫(kù),是銀彈嗎?不僅是在多機(jī)房部署的情況下,隨著數(shù)據(jù)量的急劇增大,針對(duì)Mysql的分庫(kù)分表,開發(fā)人員對(duì)JDBC Proxy還有DB Proxy進(jìn)行了深入的實(shí)戰(zhàn)。大家越來(lái)越發(fā)現(xiàn),承認(rèn)數(shù)據(jù)庫(kù)分片是很有必要的。在該基礎(chǔ)上,許多分布式數(shù)據(jù)庫(kù)如cockroach、TiDB隨之產(chǎn)生。分布式數(shù)據(jù)庫(kù)天生支持多集群、多機(jī)房的部署,這與異地多活的需求不謀而合。
通過(guò)分布式數(shù)據(jù)庫(kù),既可以實(shí)現(xiàn)數(shù)據(jù)的橫向拓展,也可以減少業(yè)務(wù)上數(shù)據(jù)同步的復(fù)雜性,幾乎可以說(shuō)是一舉多得。
此外,數(shù)據(jù)庫(kù)對(duì)于資源的需求也很高,一個(gè)三集群的TiDB,至少需要9臺(tái)物理機(jī),10個(gè)萬(wàn)兆網(wǎng)卡以及之間的3條專線。
另外的缺點(diǎn)是改架構(gòu)對(duì)于分布式數(shù)據(jù)庫(kù)集群間的延時(shí),相對(duì)苛刻,這也阻礙了改架構(gòu)在較廣域的地區(qū)無(wú)限擴(kuò)容。
圖六 分布書數(shù)據(jù)庫(kù)多機(jī)房
Part 06 總結(jié)多機(jī)房部署相對(duì)于單個(gè)機(jī)房,其難度、開發(fā)、資源開銷都是級(jí)數(shù)上升。因此具體的架構(gòu)需要根據(jù)實(shí)際需求來(lái)選擇。本文旨在介紹多機(jī)房部署的幾種類型,開拓大家的思路。實(shí)際的多機(jī)房部署形式可能也與上述的都不一樣,但是思路大體是相同的。?
標(biāo)簽: 多機(jī)房部署
- 今日?qǐng)?bào)丨多機(jī)房該如何部署?數(shù)據(jù)如何同步?
- 天天速看:圖文并茂,詳解TCP和UDP協(xié)議的原理和區(qū)別
- 全球資訊:無(wú)人機(jī)技術(shù)和用例的影響
- 環(huán)球頭條:節(jié)能網(wǎng)絡(luò)如何支持可持續(xù)發(fā)展
- 亞馬遜發(fā)布新一代6英寸Kindle入門版電子書 號(hào)稱史上最輕巧便攜
- 全球新動(dòng)態(tài):規(guī)劃 OTA 更新需要了解的三件事
- 關(guān)注:如何選擇以太網(wǎng)電纜
- 環(huán)球微速訊:應(yīng)該使用哪種以太網(wǎng)(Cat5、Cat5e、Cat6、Cat6a)電纜?
- 快看點(diǎn)丨無(wú)線供電可能是實(shí)現(xiàn)5G可持續(xù)智慧城市的關(guān)鍵
- 【天天新視野】從R15到R17,一文看懂5G的技術(shù)創(chuàng)新