久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

「從0開始學(xué)架構(gòu)」05 | 復(fù)雜度來(lái)源:高可用

 ITIL之家 2021-05-07


今天,,我們聊聊復(fù)雜度的第二個(gè)來(lái)源高可用。

參考維基百科,,先來(lái)看看高可用的定義:

系統(tǒng)無(wú)中斷地執(zhí)行其功能的能力,,代表系統(tǒng)的可用性程度,是進(jìn)行系統(tǒng)設(shè)計(jì)時(shí)的準(zhǔn)則之一,。

這個(gè)定義的關(guān)鍵在于“無(wú)中斷”,,但恰好難點(diǎn)也在“無(wú)中斷”上面,因?yàn)闊o(wú)論是單個(gè)硬件還是單個(gè)軟件,都不可能做到無(wú)中斷,,硬件會(huì)出故障,,軟件會(huì)有 bug;硬件會(huì)逐漸老化,,軟件會(huì)越來(lái)越復(fù)雜和龐大……

除了硬件和軟件本質(zhì)上無(wú)法做到“無(wú)中斷”,外部環(huán)境導(dǎo)致的不可用更加不可避免,、不受控制,。例如,斷電,、水災(zāi),、地震,這些事故或者災(zāi)難也會(huì)導(dǎo)致系統(tǒng)不可用,,而且影響程度更加嚴(yán)重,,更加難以預(yù)測(cè)和規(guī)避。

所以,,系統(tǒng)的高可用方案五花八門,,但萬(wàn)變不離其宗,本質(zhì)上都是通過(guò)“冗余”來(lái)實(shí)現(xiàn)高可用,。通俗點(diǎn)來(lái)講,,就是一臺(tái)機(jī)器不夠就兩臺(tái),兩臺(tái)不夠就四臺(tái),;一個(gè)機(jī)房可能斷電,,那就部署兩個(gè)機(jī)房;一條通道可能故障,,那就用兩條,,兩條不夠那就用三條(移動(dòng)、電信,、聯(lián)通一起上),。高可用的“冗余”解決方案,單純從形式上來(lái)看,,和之前講的高性能是一樣的,,都是通過(guò)增加更多機(jī)器來(lái)達(dá)到目的,但其實(shí)本質(zhì)上是有根本區(qū)別的:高性能增加機(jī)器目的在于“擴(kuò)展”處理性能,;高可用增加機(jī)器目的在于“冗余”處理單元,。

通過(guò)冗余增強(qiáng)了可用性,但同時(shí)也帶來(lái)了復(fù)雜性,,我會(huì)根據(jù)不同的應(yīng)用場(chǎng)景逐一分析,。

計(jì)算高可用

這里的“計(jì)算”指的是業(yè)務(wù)的邏輯處理。計(jì)算有一個(gè)特點(diǎn)就是無(wú)論在哪臺(tái)機(jī)器上進(jìn)行計(jì)算,同樣的算法和輸入數(shù)據(jù),,產(chǎn)出的結(jié)果都是一樣的,,所以將計(jì)算從一臺(tái)機(jī)器遷移到另外一臺(tái)機(jī)器,對(duì)業(yè)務(wù)并沒(méi)有什么影響,。既然如此,,計(jì)算高可用的復(fù)雜度體現(xiàn)在哪里呢?我以最簡(jiǎn)單的單機(jī)變雙機(jī)為例進(jìn)行分析,。先來(lái)看一個(gè)單機(jī)變雙機(jī)的簡(jiǎn)單架構(gòu)示意圖,。

你可能會(huì)發(fā)現(xiàn),這個(gè)雙機(jī)的架構(gòu)圖和上期“高性能”講到的雙機(jī)架構(gòu)圖是一樣的,,因此復(fù)雜度也是類似的,,具體表現(xiàn)為:

需要增加一個(gè)任務(wù)分配器,選擇合適的任務(wù)分配器也是一件復(fù)雜的事情,,需要綜合考慮性能,、成本、可維護(hù)性,、可用性等各方面因素,。

任務(wù)分配器和真正的業(yè)務(wù)服務(wù)器之間有連接和交互,需要選擇合適的連接方式,,并且對(duì)連接進(jìn)行管理,。例如,連接建立,、連接檢測(cè),、連接中斷后如何處理等。

任務(wù)分配器需要增加分配算法,。例如,,常見(jiàn)的雙機(jī)算法有主備、主主,,主備方案又可以細(xì)分為冷備,、溫備、熱備,。

上面這個(gè)示意圖只是簡(jiǎn)單的雙機(jī)架構(gòu),,我們?cè)倏匆粋€(gè)復(fù)雜一點(diǎn)的高可用集群架構(gòu)。

這個(gè)高可用集群相比雙機(jī)來(lái)說(shuō),,分配算法更加復(fù)雜,,可以是 1 主 3 備、2 主 2 備,、3 主 1 備,、4 主 0 備,具體應(yīng)該采用哪種方式,需要結(jié)合實(shí)際業(yè)務(wù)需求來(lái)分析和判斷,,并不存在某種算法就一定優(yōu)于另外的算法,。例如,ZooKeeper 采用的就是 1 主多備,,而 Memcached 采用的就是全主 0 備,。

存儲(chǔ)高可用

對(duì)于需要存儲(chǔ)數(shù)據(jù)的系統(tǒng)來(lái)說(shuō),整個(gè)系統(tǒng)的高可用設(shè)計(jì)關(guān)鍵點(diǎn)和難點(diǎn)就在于“存儲(chǔ)高可用”,。存儲(chǔ)與計(jì)算相比,,有一個(gè)本質(zhì)上的區(qū)別:將數(shù)據(jù)從一臺(tái)機(jī)器搬到到另一臺(tái)機(jī)器,需要經(jīng)過(guò)線路進(jìn)行傳輸,。線路傳輸?shù)乃俣仁呛撩爰?jí)別,,同一機(jī)房?jī)?nèi)部能夠做到幾毫秒,;分布在不同地方的機(jī)房,,傳輸耗時(shí)需要幾十甚至上百毫秒。例如,,從廣州機(jī)房到北京機(jī)房,,穩(wěn)定情況下 ping 延時(shí)大約是 50ms,不穩(wěn)定情況下可能達(dá)到 1s 甚至更多,。

雖然毫秒對(duì)于人來(lái)說(shuō)幾乎沒(méi)有什么感覺(jué),,但是對(duì)于高可用系統(tǒng)來(lái)說(shuō),就是本質(zhì)上的不同,,這意味著整個(gè)系統(tǒng)在某個(gè)時(shí)間點(diǎn)上,,數(shù)據(jù)肯定是不一致的。按照“數(shù)據(jù) + 邏輯 = 業(yè)務(wù)”這個(gè)公式來(lái)套的話,,數(shù)據(jù)不一致,,即使邏輯一致,最后的業(yè)務(wù)表現(xiàn)就不一樣了,。以最經(jīng)典的銀行儲(chǔ)蓄業(yè)務(wù)為例,,假設(shè)用戶的數(shù)據(jù)存在北京機(jī)房,用戶存入了 1 萬(wàn)塊錢,,然后他查詢的時(shí)候被路由到了上海機(jī)房,,北京機(jī)房的數(shù)據(jù)沒(méi)有同步到上海機(jī)房,用戶會(huì)發(fā)現(xiàn)他的余額并沒(méi)有增加 1 萬(wàn)塊,。想象一下,,此時(shí)用戶肯定會(huì)背后一涼,馬上會(huì)懷疑自己的錢被盜了,,然后趕緊打客服電話投訴,,甚至打 110 報(bào)警,即使最后發(fā)現(xiàn)只是因?yàn)閭鬏斞舆t導(dǎo)致的問(wèn)題,站在用戶的角度來(lái)說(shuō),,這個(gè)過(guò)程的體驗(yàn)肯定很不好,。

除了物理上的傳輸速度限制,傳輸線路本身也存在可用性問(wèn)題,,傳輸線路可能中斷,、可能擁塞、可能異常(錯(cuò)包,、丟包),,并且傳輸線路的故障時(shí)間一般都特別長(zhǎng),短的十幾分鐘,,長(zhǎng)的幾個(gè)小時(shí)都是可能的,。例如,2015 年支付寶因?yàn)楣饫|被挖斷,,業(yè)務(wù)影響超過(guò) 4 個(gè)小時(shí),;2016 年中美海底光纜中斷 3 小時(shí)等。在傳輸線路中斷的情況下,,就意味著存儲(chǔ)無(wú)法進(jìn)行同步,,在這段時(shí)間內(nèi)整個(gè)系統(tǒng)的數(shù)據(jù)是不一致的。

綜合分析,,無(wú)論是正常情況下的傳輸延遲,,還是異常情況下的傳輸中斷,都會(huì)導(dǎo)致系統(tǒng)的數(shù)據(jù)在某個(gè)時(shí)間點(diǎn)或者時(shí)間段是不一致的,,而數(shù)據(jù)的不一致又會(huì)導(dǎo)致業(yè)務(wù)問(wèn)題,;但如果完全不做冗余,系統(tǒng)的整體高可用又無(wú)法保證,,所以存儲(chǔ)高可用的難點(diǎn)不在于如何備份數(shù)據(jù),,而在于如何減少或者規(guī)避數(shù)據(jù)不一致對(duì)業(yè)務(wù)造成的影響。

分布式領(lǐng)域里面有一個(gè)著名的 CAP 定理,,從理論上論證了存儲(chǔ)高可用的復(fù)雜度,。也就是說(shuō),存儲(chǔ)高可用不可能同時(shí)滿足“一致性,、可用性,、分區(qū)容錯(cuò)性”,最多滿足其中兩個(gè),,這就要求我們?cè)谧黾軜?gòu)設(shè)計(jì)時(shí)結(jié)合業(yè)務(wù)進(jìn)行取舍,。

高可用狀態(tài)決策

無(wú)論是計(jì)算高可用還是存儲(chǔ)高可用,其基礎(chǔ)都是“狀態(tài)決策”,,即系統(tǒng)需要能夠判斷當(dāng)前的狀態(tài)是正常還是異常,,如果出現(xiàn)了異常就要采取行動(dòng)來(lái)保證高可用,。如果狀態(tài)決策本身都是有錯(cuò)誤或者有偏差的,那么后續(xù)的任何行動(dòng)和處理無(wú)論多么完美也都沒(méi)有意義和價(jià)值,。但在具體實(shí)踐的過(guò)程中,,恰好存在一個(gè)本質(zhì)的矛盾:通過(guò)冗余來(lái)實(shí)現(xiàn)的高可用系統(tǒng),狀態(tài)決策本質(zhì)上就不可能做到完全正確,。下面我基于幾種常見(jiàn)的決策方式進(jìn)行詳細(xì)分析,。

  1. 獨(dú)裁式

獨(dú)裁式?jīng)Q策指的是存在一個(gè)獨(dú)立的決策主體,我們姑且稱它為“決策者”,,負(fù)責(zé)收集信息然后進(jìn)行決策,;所有冗余的個(gè)體,我們姑且稱它為“上報(bào)者”,,都將狀態(tài)信息發(fā)送給決策者,。

獨(dú)裁式的決策方式不會(huì)出現(xiàn)決策混亂的問(wèn)題,因?yàn)橹挥幸粋€(gè)決策者,,但問(wèn)題也正是在于只有一個(gè)決策者,。當(dāng)決策者本身故障時(shí),整個(gè)系統(tǒng)就無(wú)法實(shí)現(xiàn)準(zhǔn)確的狀態(tài)決策,。如果決策者本身又做一套狀態(tài)決策,,那就陷入一個(gè)遞歸的死循環(huán)了,。

2. 協(xié)商式

協(xié)商式?jīng)Q策指的是兩個(gè)獨(dú)立的個(gè)體通過(guò)交流信息,,然后根據(jù)規(guī)則進(jìn)行決策,最常用的協(xié)商式?jīng)Q策就是主備決策,。

這個(gè)架構(gòu)的基本協(xié)商規(guī)則可以設(shè)計(jì)成:

2 臺(tái)服務(wù)器啟動(dòng)時(shí)都是備機(jī),。

2 臺(tái)服務(wù)器建立連接。

2 臺(tái)服務(wù)器交換狀態(tài)信息,。

某 1 臺(tái)服務(wù)器做出決策,,成為主機(jī);

另一臺(tái)服務(wù)器繼續(xù)保持備機(jī)身份,。

協(xié)商式?jīng)Q策的架構(gòu)不復(fù)雜,,規(guī)則也不復(fù)雜,其難點(diǎn)在于,,如果兩者的信息交換出現(xiàn)問(wèn)題(比如主備連接中斷),,此時(shí)狀態(tài)決策應(yīng)該怎么做。如果備機(jī)在連接中斷的情況下認(rèn)為主機(jī)故障,,那么備機(jī)需要升級(jí)為主機(jī),,但實(shí)際上此時(shí)主機(jī)并沒(méi)有故障,那么系統(tǒng)就出現(xiàn)了兩個(gè)主機(jī),,這與設(shè)計(jì)初衷(1 主 1 備)是不符合的,。

如果備機(jī)在連接中斷的情況下不認(rèn)為主機(jī)故障,,則此時(shí)如果主機(jī)真的發(fā)生故障,那么系統(tǒng)就沒(méi)有主機(jī)了,,這同樣與設(shè)計(jì)初衷(1 主 1 備)是不符合的,。

如果為了規(guī)避連接中斷對(duì)狀態(tài)決策帶來(lái)的影響,可以增加更多的連接,。例如,,雙連接、三連接,。這樣雖然能夠降低連接中斷對(duì)狀態(tài)帶來(lái)的影響(注意:只能降低,,不能徹底解決),但同時(shí)又引入了這幾條連接之間信息取舍的問(wèn)題,,即如果不同連接傳遞的信息不同,,應(yīng)該以哪個(gè)連接為準(zhǔn)?實(shí)際上這也是一個(gè)無(wú)解的答案,,無(wú)論以哪個(gè)連接為準(zhǔn),,在特定場(chǎng)景下都可能存在問(wèn)題。

綜合分析,,協(xié)商式狀態(tài)決策在某些場(chǎng)景總是存在一些問(wèn)題的,。

3. 民主式

民主式?jīng)Q策指的是多個(gè)獨(dú)立的個(gè)體通過(guò)投票的方式來(lái)進(jìn)行狀態(tài)決策。例如,,ZooKeeper 集群在選舉 leader 時(shí)就是采用這種方式,。

民主式?jīng)Q策和協(xié)商式?jīng)Q策比較類似,其基礎(chǔ)都是獨(dú)立的個(gè)體之間交換信息,,每個(gè)個(gè)體做出自己的決策,,然后按照“多數(shù)取勝”的規(guī)則來(lái)確定最終的狀態(tài)。不同點(diǎn)在于民主式?jīng)Q策比協(xié)商式?jīng)Q策要復(fù)雜得多,,ZooKeeper 的選舉算法 ZAB,,絕大部分人都看得云里霧里,更不用說(shuō)用代碼來(lái)實(shí)現(xiàn)這套算法了,。

除了算法復(fù)雜,,民主式?jīng)Q策還有一個(gè)固有的缺陷:腦裂。這個(gè)詞來(lái)源于醫(yī)學(xué),,指人體左右大腦半球的連接被切斷后,,左右腦因?yàn)闊o(wú)法交換信息,導(dǎo)致各自做出決策,,然后身體受到兩個(gè)大腦分別控制,,會(huì)做出各種奇怪的動(dòng)作。例如:當(dāng)一個(gè)腦裂患者更衣時(shí),,他有時(shí)會(huì)一只手將褲子拉起,,另一只手卻將褲子往下脫,。腦裂的根本原因是,原來(lái)統(tǒng)一的集群因?yàn)檫B接中斷,,造成了兩個(gè)獨(dú)立分隔的子集群,,每個(gè)子集群?jiǎn)为?dú)進(jìn)行選舉,于是選出了 2 個(gè)主機(jī),,相當(dāng)于人體有兩個(gè)大腦了,。

從圖中可以看到,正常狀態(tài)的時(shí)候,,節(jié)點(diǎn) 5 作為主節(jié)點(diǎn),,其他節(jié)點(diǎn)作為備節(jié)點(diǎn);當(dāng)連接發(fā)生故障時(shí),,節(jié)點(diǎn) 1,、節(jié)點(diǎn) 2、節(jié)點(diǎn) 3 形成了一個(gè)子集群,,節(jié)點(diǎn) 4,、節(jié)點(diǎn) 5 形成了另外一個(gè)子集群,這兩個(gè)子集群的連接已經(jīng)中斷,,無(wú)法進(jìn)行信息交換,。按照民主決策的規(guī)則和算法,兩個(gè)子集群分別選出了節(jié)點(diǎn) 2 和節(jié)點(diǎn) 5 作為主節(jié)點(diǎn),,此時(shí)整個(gè)系統(tǒng)就出現(xiàn)了兩個(gè)主節(jié)點(diǎn),。這個(gè)狀態(tài)違背了系統(tǒng)設(shè)計(jì)的初衷,兩個(gè)主節(jié)點(diǎn)會(huì)各自做出自己的決策,,整個(gè)系統(tǒng)的狀態(tài)就混亂了,。

為了解決腦裂問(wèn)題,,民主式?jīng)Q策的系統(tǒng)一般都采用“投票節(jié)點(diǎn)數(shù)必須超過(guò)系統(tǒng)總節(jié)點(diǎn)數(shù)一半”規(guī)則來(lái)處理,。如圖中那種情況,節(jié)點(diǎn) 4 和節(jié)點(diǎn) 5 形成的子集群總節(jié)點(diǎn)數(shù)只有 2 個(gè),,沒(méi)有達(dá)到總節(jié)點(diǎn)數(shù) 5 個(gè)的一半,,因此這個(gè)子集群不會(huì)進(jìn)行選舉。這種方式雖然解決了腦裂問(wèn)題,,但同時(shí)降低了系統(tǒng)整體的可用性,,即如果系統(tǒng)不是因?yàn)槟X裂問(wèn)題導(dǎo)致投票節(jié)點(diǎn)數(shù)過(guò)少,而真的是因?yàn)楣?jié)點(diǎn)故障(例如,,節(jié)點(diǎn) 1,、節(jié)點(diǎn) 2、節(jié)點(diǎn) 3 真的發(fā)生了故障),,此時(shí)系統(tǒng)也不會(huì)選出主節(jié)點(diǎn),,整個(gè)系統(tǒng)就相當(dāng)于宕機(jī)了,,盡管此時(shí)還有節(jié)點(diǎn) 4 和節(jié)點(diǎn) 5 是正常的。

綜合分析,,無(wú)論采取什么樣的方案,,狀態(tài)決策都不可能做到任何場(chǎng)景下都沒(méi)有問(wèn)題,但完全不做高可用方案又會(huì)產(chǎn)生更大的問(wèn)題,,如何選取適合系統(tǒng)的高可用方案,,也是一個(gè)復(fù)雜的分析、判斷和選擇的過(guò)程,。

小結(jié)

今天我給你講了復(fù)雜度來(lái)源之一的高可用,,分析了計(jì)算高可用和存儲(chǔ)高可用兩個(gè)場(chǎng)景,給出了幾種高可用狀態(tài)決策方式,,希望對(duì)你有所幫助,。這就是今天的全部?jī)?nèi)容,留一道思考題給你吧,。高性能和高可用是很多系統(tǒng)的核心復(fù)雜度,,你認(rèn)為哪個(gè)會(huì)更復(fù)雜一些?理由是什么,?

更多推薦
「從0開始學(xué)架構(gòu)」04 | 復(fù)雜度來(lái)源:高性能

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多