聊聊業(yè)務(wù)高可用的保障:異地多活架構(gòu)
無論是高可用計算架構(gòu)還是高可用存儲架構(gòu),它們的核心設(shè)計目標(biāo)均是在部分服務(wù)器出現(xiàn)故障時確保系統(tǒng)能繼續(xù)運行。然而,在極端情況下,如機房斷電、火災(zāi)、地震或洪水等,可能導(dǎo)致一個地點的所有服務(wù)器同時出現(xiàn)故障,使得整個業(yè)務(wù)系統(tǒng)癱瘓。即便依靠其他地區(qū)的備份系統(tǒng),全面恢復(fù)業(yè)務(wù)的時間也可能較長,從半小時到12小時不等。備份系統(tǒng)由于平時不提供服務(wù),可能存在許多未被發(fā)現(xiàn)的潛在問題。如果業(yè)務(wù)需求是在這種災(zāi)難性故障發(fā)生后也能保持業(yè)務(wù)連續(xù)性,或者希望在幾分鐘內(nèi)快速恢復(fù)服務(wù),那么就需要采用異地多活架構(gòu)。
接下來,我將繼續(xù)探討異地多活架構(gòu)的設(shè)計技巧和實施流程。
圖片
應(yīng)用場景
異地多活架構(gòu)的核心概念包括“異地”和“多活”,其中“異地”指的是將系統(tǒng)部署在地理位置分散的不同地點,類似于常說的“不把所有雞蛋放在一個籃子里”的策略;而“多活”意味著這些地理上分散的系統(tǒng)都處于活躍狀態(tài),隨時能夠提供業(yè)務(wù)服務(wù)。要判斷一個系統(tǒng)是否實現(xiàn)了異地多活,主要看以下兩點:
在正常情況下,無論用戶連接到哪個地點的系統(tǒng),都能夠接收到一致且正確的服務(wù)。
當(dāng)某地的系統(tǒng)出現(xiàn)異常時,用戶可以無縫連接到其他地點的系統(tǒng),繼續(xù)獲得所需服務(wù)。
相對于“多活”的“備”更多指的是備份系統(tǒng),這類系統(tǒng)通常不對外提供服務(wù),只在主系統(tǒng)出現(xiàn)問題時,經(jīng)過一系列人工操作后才能變“活”,這個過程通常耗時較長。
雖然從理論上講,異地多活架構(gòu)能夠提供極高的業(yè)務(wù)連續(xù)性,即使在面臨災(zāi)難時也能保證業(yè)務(wù)不中斷,但這并不意味著所有業(yè)務(wù)都必須實現(xiàn)異地多活。實際上,異地多活架構(gòu)的成本和系統(tǒng)復(fù)雜度都非常高。具體體現(xiàn)在:
- 系統(tǒng)設(shè)計復(fù)雜度顯著增加,需要構(gòu)建一個在多個地點同時活躍的復(fù)雜系統(tǒng)架構(gòu)。
- 運行成本提高,因為需要在多個數(shù)據(jù)中心部署并維護相同的業(yè)務(wù)系統(tǒng)。
因此,并非所有業(yè)務(wù)都適合采用異地多活架構(gòu)。對于一些新聞網(wǎng)站、內(nèi)部IT系統(tǒng)、游戲和博客等,如果不能承擔(dān)高昂的成本和復(fù)雜度,可以選擇僅進行異地備份。這類業(yè)務(wù)即便暫時中斷,也不會對用戶造成重大影響。例如,如果一個新聞網(wǎng)站暫時無法訪問,用戶可以選擇其他新聞源。
然而,對于像共享單車、網(wǎng)約車、支付寶、微信等關(guān)鍵業(yè)務(wù)系統(tǒng),它們的中斷會直接影響到用戶的日常生活,因此必須實現(xiàn)異地多活架構(gòu)。此外,對于規(guī)模較大的業(yè)務(wù),異地多活不僅可以在突發(fā)事件中保證服務(wù)的連續(xù)性,還有助于維護品牌聲譽和最小化收入損失。例如,對于新聞網(wǎng)站來說,雖然短時間的服務(wù)中斷看似影響有限,但從長遠(yuǎn)來看,頻繁的服務(wù)中斷會損害用戶信任,同時也會導(dǎo)致廣告收入的直接損失。
架構(gòu)模式
異地多活架構(gòu)根據(jù)地理位置的分布,可以分為同城異區(qū)、跨城異地和跨國異地。這里,我將詳細(xì)說明每種架構(gòu)的細(xì)節(jié)及其優(yōu)缺點。
同城異區(qū)
這種架構(gòu)涉及在同一城市的不同區(qū)域部署多個數(shù)據(jù)中心。例如,在北京的海淀區(qū)和通州區(qū)各設(shè)有一個數(shù)據(jù)中心,它們通過高速網(wǎng)絡(luò)連接。
雖然在極端災(zāi)難如全城大停電或洪水時,同城異區(qū)可能無法提供保護,但這種設(shè)計的優(yōu)點在于網(wǎng)絡(luò)延遲極低,可以視為一個邏輯上的單一數(shù)據(jù)中心,這簡化了系統(tǒng)設(shè)計,降低了成本和復(fù)雜度。
盡管面對如新奧爾良洪水這樣的災(zāi)難無力回天,但需要注意的是這類極端災(zāi)難發(fā)生的頻率相對較低。相比之下,如數(shù)據(jù)中心火災(zāi)、停電或空調(diào)故障這樣的常見問題更為頻繁,同城異區(qū)架構(gòu)能有效應(yīng)對這些情況。綜合考慮成本、復(fù)雜度和故障概率,同城異區(qū)為解決數(shù)據(jù)中心級別的故障提供了最優(yōu)解決方案。
圖片
跨城異地
跨城異地指將業(yè)務(wù)系統(tǒng)部署在相距較遠(yuǎn)的不同城市,比如北京和廣州,而不是相近的城市如廣州和深圳。
圖片
跨城部署的主要優(yōu)點是能有效抵御區(qū)域性災(zāi)難,如大規(guī)模停電或地區(qū)性自然災(zāi)害。然而,增加的地理距離導(dǎo)致網(wǎng)絡(luò)延遲增加,這不僅是因為物理距離,還包括中間網(wǎng)絡(luò)設(shè)備處理等因素,這使得設(shè)計異地多活架構(gòu)的復(fù)雜度大幅上升。
跨城異地的網(wǎng)絡(luò)傳輸速度會受到限制,這是由光速在光纖中的傳播速度決定的。此外,網(wǎng)絡(luò)中斷、光纜損壞等不可預(yù)測的因素也可能導(dǎo)致連接問題。例如,從廣州到北京的機房網(wǎng)絡(luò)延遲在正常情況下可能為50毫秒,但在網(wǎng)絡(luò)不穩(wěn)定時,延遲可能急劇增加。
針對這種架構(gòu),必須考慮數(shù)據(jù)一致性與業(yè)務(wù)需求。對于要求高數(shù)據(jù)一致性的服務(wù)(如金融服務(wù)),跨城異地多活可能不適合,因為數(shù)據(jù)不一致性可能導(dǎo)致重大錯誤。而對于數(shù)據(jù)一致性要求較低的應(yīng)用,如新聞發(fā)布或社交媒體,跨城異地多活則可以提供有效的災(zāi)難恢復(fù)解決方案。
跨國異地指的是業(yè)務(wù)部署在不同國家的多個機房。相比跨城異地,跨國異地的距離就更遠(yuǎn)了,因此數(shù)據(jù)同步的延時會更長,正常情況下可能就有幾秒鐘了。這種程度的延遲已經(jīng)無法滿足異地多活標(biāo)準(zhǔn)的第一條:“正常情況下,用戶無論訪問哪一個地點的業(yè)務(wù)系統(tǒng),都能夠得到正確的業(yè)務(wù)服務(wù)”。例如,假設(shè)有一個微博類網(wǎng)站,分別在中國的上海和美國的紐約都建了機房,用戶 A 在上海機房發(fā)表了一篇微博,此時如果他的一個關(guān)注者 B 用戶訪問到美國的機房,很可能無法看到用戶 A 剛剛發(fā)表的微博。雖然跨城異地也會有此類同步延時問題,但正常情況下幾十毫秒的延時對用戶來說基本無感知的;而延時達(dá)到幾秒鐘就感覺比較明顯了。
因此,跨國異地的“多活”,和跨城異地的“多活”,實際的含義并不完全一致??鐕惖囟嗷畹闹饕獞?yīng)用場景一般有這幾種情況:
為不同地區(qū)用戶提供服務(wù)
例如,亞馬遜中國是為中國用戶服務(wù)的,而亞馬遜美國是為美國用戶服務(wù)的,亞馬遜中國的用戶如果訪問美國亞馬遜,是無法用亞馬遜中國的賬號登錄美國亞馬遜的。
只讀類業(yè)務(wù)做多活
例如,谷歌的搜索業(yè)務(wù),由于用戶搜索資料時,這些資料都已經(jīng)存在于谷歌的搜索引擎上面,無論是訪問英國谷歌,還是訪問美國谷歌,搜索結(jié)果基本相同,并且對用戶來說,也不需要搜索到最新的實時資料,跨國異地的幾秒鐘網(wǎng)絡(luò)延遲,對搜索結(jié)果是沒有什么影響的。
假設(shè)我們做了前面提到的高可用存儲架構(gòu)中的數(shù)據(jù)分區(qū)備份,又通過自動化運維能夠保證 1 分鐘就能將全部系統(tǒng)正常啟動,那是否意味著沒有必要做異地多活了?