對于互聯(lián)網(wǎng)服務(wù)來說,關(guān)鍵業(yè)務(wù)7*24小時不間斷的服務(wù)非常重要。作為一個享受互聯(lián)網(wǎng)服務(wù)的人,你能想象到抖音微博七分鐘無法加載、微信五分鐘無法打開、支付寶3分鐘無法支付的情況嗎?簡直無法想象,生活在微信、微博、QQ、抖音、支付寶、淘寶、美團外賣、滴滴打車的我們已經(jīng)習慣了打開app就可以聊天、購物、刷視頻、打車、點外賣了。而在這些服務(wù)時時可運行的背后,全都是一線大廠的開發(fā)人員、運維人員努力工作的保障。
那么一線大廠人員是如何保障系統(tǒng)高可用的呢?四個字:服務(wù)多活。所謂“活”指的是業(yè)務(wù)隨時提供服務(wù),多活是指業(yè)務(wù)在多個地方都可以隨時提供服務(wù)。我們知道服務(wù)都是部署在服務(wù)器上,而服務(wù)器都是安裝在機房內(nèi)的。我們更知道,沒有什么事情是萬無一失的,機房也可能會不工作,比如機房斷電、機房火災(zāi)、機房地震等等,所有的這些不可抗拒因素都會導(dǎo)致機房內(nèi)所有的服務(wù)器崩塌,進而導(dǎo)致業(yè)務(wù)崩潰,因此我們需要服務(wù)多活。
服務(wù)多活如果落地到解決方案上,那便是同城雙活架構(gòu)、兩地三中心架構(gòu)、異地多活架構(gòu)。
所謂同城雙活,指的是在同城或相近區(qū)域內(nèi)建立兩個機房。這樣的好處是機房與機房之間距離比較近,通信鏈路的質(zhì)量很好,數(shù)據(jù)傳輸快,容易保障數(shù)據(jù)的一致性。在同城雙活架構(gòu)中,前端的請求數(shù)據(jù)來了之后,會根據(jù)請求所發(fā)起的地理位置進行就近分發(fā),請求分發(fā)在最近的機房后,機房內(nèi)的應(yīng)用就互相調(diào)用,數(shù)據(jù)寫入數(shù)據(jù)庫,完成業(yè)務(wù)的請求。在應(yīng)用所部署的機器集群有內(nèi)有zookeeper集群,將機房內(nèi)的生產(chǎn)者消費者節(jié)點數(shù)據(jù)實時雙向同步,數(shù)據(jù)庫集群的部署采取Master&Slave模式,通過讀寫分離,將讀數(shù)據(jù)路由到就近機房內(nèi)節(jié)點,寫數(shù)據(jù)路由到master節(jié)點所在機房。如果有某個機房出現(xiàn)了故障,運維人員只需要改動路由方式將流量路由到另外一個機房即可。
同城雙活架構(gòu)的優(yōu)點有兩個,第一是服務(wù)同城雙活、數(shù)據(jù)同城備份,保障了服務(wù)高可用、數(shù)據(jù)高一致性性,第二是架構(gòu)比較簡單,同城之間距離較近,網(wǎng)絡(luò)通信質(zhì)量好。但是也存在一些缺點,第一是數(shù)據(jù)庫寫數(shù)據(jù)的時候跨機房的調(diào)用增加了響應(yīng)時間,會帶來一定程度的用戶體驗影響,第二是如果該城市發(fā)生了地震火災(zāi)等情況,整個服務(wù)都會癱瘓。
所謂兩地三中心,指的是同城雙中心、一個異地災(zāi)備中心。這是同城雙活架構(gòu)的升級版,解決了如果同城發(fā)生了火災(zāi)地震等不可抗力因素時應(yīng)用提供服務(wù)的情況。但其實也存在一個風險,就是災(zāi)備中心的數(shù)據(jù)都是“冷”的,平時只是定期同步了中心機房的數(shù)據(jù),并沒有真實的用戶請求過來,如果真的到了同城雙中心都無法對外提供服務(wù)的時候,災(zāi)備中心去進行業(yè)務(wù)的恢復(fù),對外提供服務(wù)需要一定的耗時。
所謂異地多活,指的是在不同的地域有多個機房對外提供服務(wù)。在異地多活架構(gòu)中,存在很多挑戰(zhàn),比如物理距離帶來的延時、數(shù)據(jù)的一致性、數(shù)據(jù)的完整性等等。在異地多活架構(gòu)中,我們采用了更巧妙的方法,即根據(jù)業(yè)務(wù)數(shù)據(jù)將業(yè)務(wù)應(yīng)用分為三類,第一類是對延時不敏感但對數(shù)據(jù)一致性要求非常高的應(yīng)用,第二類是對延時敏感但對數(shù)據(jù)一致性要求不高的應(yīng)用,第三類是在一次操作內(nèi)要完成所有業(yè)務(wù)操作的應(yīng)用。在服務(wù)高可用方面,根據(jù)應(yīng)用的特性進行不同的方案部署即可。在請求分發(fā)方面,為了保障用戶請求都能正確進入自己所屬的業(yè)務(wù)模塊,我們在機房的入口都會部署一個網(wǎng)關(guān),根據(jù)用戶請求類型把流量分發(fā)到對應(yīng)的模塊。在數(shù)據(jù)同步方面,還是根據(jù)業(yè)務(wù)類型以及業(yè)務(wù)部署模式進行讀寫備份。
異地多活架構(gòu)有三個優(yōu)點、兩個缺點。第一個優(yōu)點是服務(wù)異地多活、數(shù)據(jù)異地多活,有多個地域的機器隨時在提供服務(wù),帶來了容災(zāi)能力的大幅度提高。第二個優(yōu)點是服務(wù)可以水平擴展,業(yè)務(wù)增長快,那么就多部署幾個地域的機房就好了。第三個優(yōu)點是防風險能力高,用戶請求分發(fā)到了多個機房、地區(qū),能避免斷電火災(zāi)地震等情況帶來的服務(wù)不可用,降低了故障影響范圍。它的第一個缺點是部署和運維成本高,我們可以看到在應(yīng)用分類、異地部署、數(shù)據(jù)同步上是多個地方多個機房多臺服務(wù)器之間同時進行的。第二個缺點是跨地域、跨機房、跨服務(wù)之間的調(diào)用帶來的延時。
至此,對于同城雙活、兩地三中心、異地多活我們就介紹完了。講真的,我們生活在互聯(lián)網(wǎng)時代,真的無法想象抖音微信微博支付寶淘寶都不能用了是什么樣子?還好還好,有一個又一個的互聯(lián)網(wǎng)后浪們?yōu)槲覀兇罱烁呖捎玫姆?wù)架構(gòu),保障了我們的正常互聯(lián)網(wǎng)生活。