《從零開(kāi)始學(xué)習(xí)架構(gòu)》之業(yè)務(wù)高可用讀書(shū)筆記

這一章節(jié)作者從“異地多活”和“接口級(jí)別故障”兩個(gè)業(yè)務(wù)場(chǎng)景中,考慮如何設(shè)計(jì)高可用系統(tǒng)。

一、異地多活

異地多活是指,正常情況下用戶無(wú)論訪問(wèn)哪一個(gè)地點(diǎn)的業(yè)務(wù)系統(tǒng),都能夠得到正確的業(yè)務(wù)服務(wù);若某個(gè)地方業(yè)務(wù)異常的時(shí)候,用戶訪問(wèn)其他不同地理位置正常的業(yè)務(wù)系統(tǒng),也能夠得到正確的業(yè)務(wù)服務(wù)。

異地多活架構(gòu)設(shè)計(jì)是為了應(yīng)對(duì)在一些極端場(chǎng)景下,服務(wù)器出現(xiàn)故障如機(jī)房斷電、地震等等。但是,要實(shí)現(xiàn)異地多活的代價(jià)比較高,一方面系統(tǒng)的復(fù)雜度會(huì)變變高;另一方面,系統(tǒng)實(shí)現(xiàn)的成本也會(huì)變高。

作者從異地多活的架構(gòu)模式、設(shè)計(jì)技巧、設(shè)計(jì)步驟幾個(gè)方面簡(jiǎn)單介紹了異地多活。

1.異地多活的架構(gòu)模式

從地理位置上的距離來(lái)劃分,可以分為同城異區(qū)、跨城異地、跨國(guó)異地。

同城異區(qū)指將業(yè)務(wù)部署在同一個(gè)城市不同區(qū)的多個(gè)機(jī)房。若某個(gè)區(qū)機(jī)房的電纜被挖斷,同城異區(qū)架構(gòu)可以很好地解決。同城異區(qū)是應(yīng)對(duì)機(jī)房級(jí)別故障的最優(yōu)架構(gòu)。

跨城異地指業(yè)務(wù)部署在不同城市的多個(gè)機(jī)房,而且距離要遠(yuǎn)一些。如將業(yè)務(wù)部署在上海和北京兩個(gè)機(jī)房。部署在不同的城市,可以解決某個(gè)城市遇到水災(zāi)等地理災(zāi)難的問(wèn)題,但是由于距離遠(yuǎn)的因素,可能會(huì)導(dǎo)致數(shù)據(jù)在同步時(shí),出現(xiàn)延遲問(wèn)題。所以,對(duì)數(shù)據(jù)一致性要求很高的業(yè)務(wù),如金融相關(guān)系統(tǒng),一般不會(huì)做跨城異地多活。

跨國(guó)異地指業(yè)務(wù)部署在不同國(guó)家的多個(gè)機(jī)房。由于距離比較遠(yuǎn),所以延時(shí)比較明顯,因而跨國(guó)異地一般用來(lái)為不同地區(qū)用戶提供服務(wù)或者是對(duì)只讀業(yè)務(wù)做多活。

2.異地多活設(shè)計(jì)技巧

作者主要提供了4個(gè)技巧:保證核心業(yè)務(wù)的異地多活、保證核心數(shù)據(jù)最終一致性、采用多種手段同步數(shù)據(jù)、只保證絕大部分用戶的異地多活。

異地多活是為了保證業(yè)務(wù)的高可用,但是很多人就誤以為要保證所有業(yè)務(wù)都能夠異地多活。一方面由于延遲的原因,可能所有的業(yè)務(wù)無(wú)法都實(shí)現(xiàn)異地多活,或者難實(shí)現(xiàn)異地多活;另一方面,有些非核心業(yè)務(wù),暫時(shí)的不可用可能不會(huì)對(duì)系統(tǒng)造成太大的影響。所以,設(shè)計(jì)的第一個(gè)技巧就是優(yōu)先實(shí)現(xiàn)核心業(yè)務(wù)的異地多活架構(gòu)。

異地多活的本質(zhì)是通過(guò)異地的數(shù)據(jù)冗余,來(lái)保證在極端異常的情況下業(yè)務(wù)也能夠正常提供給用戶使用。所以,數(shù)據(jù)同步是異地多活架構(gòu)設(shè)計(jì)的核心。盡管業(yè)務(wù)上要求數(shù)據(jù)快速同步,但是物理上做不到數(shù)據(jù)快速同步。所以,設(shè)計(jì)的第二個(gè)技巧就是保證核心數(shù)據(jù)最終一致性,而非實(shí)時(shí)一致性。

由于數(shù)據(jù)同步是異步多活架構(gòu)設(shè)計(jì)的核心,所以在實(shí)現(xiàn)數(shù)據(jù)同步時(shí),不應(yīng)只使用存儲(chǔ)系統(tǒng)的同步功能,可以將多種手段配合存儲(chǔ)系統(tǒng)的同步使用,如采用消息隊(duì)列方式、二次讀取方式、存儲(chǔ)系統(tǒng)同步方式、回源讀取方式、重新生成數(shù)據(jù)方式等。即采用多種手段同步數(shù)據(jù)。

盡管異地多活設(shè)計(jì)是為了應(yīng)對(duì)極端情況下業(yè)務(wù)的可用,但是在某些場(chǎng)景下,這種架構(gòu)仍然無(wú)法保證100%的業(yè)務(wù)可用性,所以,設(shè)計(jì)的最后一個(gè)技巧就是,只保證絕大部分用戶的異地多活

3.異地多活設(shè)計(jì)步驟

主要分為四步驟:業(yè)務(wù)分級(jí)、數(shù)據(jù)分類(lèi)、數(shù)據(jù)同步和異常處理。

業(yè)務(wù)分級(jí)即按照一定的標(biāo)準(zhǔn)將業(yè)務(wù)進(jìn)行分級(jí),挑選出核心的業(yè)務(wù),只為核心業(yè)務(wù)設(shè)計(jì)異地多活,以便降低方案整體復(fù)雜度和實(shí)現(xiàn)成本。

數(shù)據(jù)分類(lèi)即挑選出核心業(yè)務(wù)后,對(duì)核心業(yè)務(wù)相關(guān)數(shù)據(jù)進(jìn)行分析,識(shí)別所有的數(shù)據(jù)及數(shù)據(jù)特征。如數(shù)據(jù)量、唯一性、實(shí)時(shí)性、可丟失性、可恢復(fù)性等。

數(shù)據(jù)同步即在確定數(shù)據(jù)特征后,根據(jù)不同的數(shù)據(jù)設(shè)計(jì)不同的同步方案。常見(jiàn)的數(shù)據(jù)同步方案有:存儲(chǔ)系統(tǒng)同步、消息隊(duì)列同步、重復(fù)生成。

異常處理即在數(shù)據(jù)出現(xiàn)異常問(wèn)題時(shí),系統(tǒng)采取的應(yīng)對(duì)措施。避免問(wèn)題發(fā)生時(shí),導(dǎo)致整體業(yè)務(wù)不可用;問(wèn)題恢復(fù)后,對(duì)異常數(shù)據(jù)的修復(fù)等。常見(jiàn)的異常處理措施有:多通道同步、同步和訪問(wèn)結(jié)合、記錄日志、用戶補(bǔ)償?shù)取?/p>

二、接口級(jí)別故障

異地多活方案主要針對(duì)系統(tǒng)級(jí)別的故障,而接口級(jí)別故障,顧名思義就是針對(duì)接口級(jí)別的故障。其典型表現(xiàn)就是,系統(tǒng)沒(méi)有宕機(jī)、網(wǎng)絡(luò)沒(méi)有中斷,但是業(yè)務(wù)出現(xiàn)問(wèn)題。內(nèi)部可能是程序bug問(wèn)題,外部可能是黑客攻擊、大量請(qǐng)求訪問(wèn)等等。

解決辦法一般分為三種:降級(jí)、熔斷、限流、排隊(duì)。降級(jí)就是系統(tǒng)將某些業(yè)務(wù)或者接口的功能降級(jí),只提供部分功能,關(guān)閉其余功能。如雙十一開(kāi)始時(shí),關(guān)閉修改地址的功能。熔斷指暫停調(diào)用出現(xiàn)問(wèn)題的外部系統(tǒng),主要通過(guò)統(tǒng)一的API調(diào)用層和閾值來(lái)實(shí)現(xiàn)的。限流指只允許系統(tǒng)能夠承受的訪問(wèn)量進(jìn)來(lái),超出系統(tǒng)訪問(wèn)能力的請(qǐng)求將被丟棄。排隊(duì)指只處理系統(tǒng)能夠承受的訪問(wèn)量進(jìn)來(lái),超出系統(tǒng)訪問(wèn)能力的請(qǐng)求需要排隊(duì)等待處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容