從0開始學(xué)架構(gòu) - 復(fù)雜度來源:高可用

維基百科高可用的定義:

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

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

系統(tǒng)的高可用本質(zhì)上都是通過“冗余”來實(shí)現(xiàn)高可用。高可用的“冗余”解決方案迷郑,單純從形式上來看枝恋,和高性能是一樣的创倔,都是通過增加更多機(jī)器來達(dá)到目的,但其實(shí)本質(zhì)上是有根本區(qū)別的:高性能增加機(jī)器目的在于“擴(kuò)展”處理性能焚碌;高可用增加機(jī)器目的在于“冗余”處理單元畦攘。通過冗余增強(qiáng)了可用性,但同時(shí)也帶來了復(fù)雜性呐能。

計(jì)算高可用

這里的“計(jì)算”指的是業(yè)務(wù)的邏輯處理念搬。計(jì)算有一個(gè)特點(diǎn)就是無論在哪臺(tái)機(jī)器上進(jìn)行計(jì)算,同樣的算法和輸入數(shù)據(jù)摆出,產(chǎn)出的結(jié)果都是一樣的朗徊,所以將計(jì)算從一臺(tái)機(jī)器遷移到另外一臺(tái)機(jī)器,對(duì)業(yè)務(wù)并沒有什么影響偎漫。

單機(jī)變雙機(jī)架構(gòu)

單機(jī)變雙機(jī)架構(gòu)
  • 需要增加一個(gè)任務(wù)分配器爷恳,選擇合適的任務(wù)分配器也是一件復(fù)雜的事情,需要綜合考慮性能象踊、成本温亲、可維護(hù)性、可用性等各方面因素杯矩。

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

  • 任務(wù)分配器需要增加分配算法。例如熔酷,常見的雙機(jī)算法有主備孤紧、主主,主備方案又可以細(xì)分為冷備拒秘、溫備号显、熱備。

高可用集群架構(gòu)

高可用集群架構(gòu)

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

ZooKeeper 是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)滞详,是 Google 的 Chubby 一個(gè)開源的實(shí)現(xiàn)凛俱,是 Hadoop 和 Hbase 的重要組件。
Memcached 是一個(gè)高性能的分布式內(nèi)存對(duì)象緩存系統(tǒng)料饥,用于動(dòng)態(tài) Web 應(yīng)用以減輕數(shù)據(jù)庫(kù)負(fù)載蒲犬。它通過在內(nèi)存中緩存數(shù)據(jù)和對(duì)象來減少讀取數(shù)據(jù)庫(kù)的次數(shù),從而提高動(dòng)態(tài)岸啡、數(shù)據(jù)庫(kù)驅(qū)動(dòng)網(wǎng)站的速度原叮。

存儲(chǔ)高可用

對(duì)于需要存儲(chǔ)數(shù)據(jù)的系統(tǒng)來說,整個(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)過線路進(jìn)行傳輸悦荒。線路傳輸?shù)乃俣仁呛撩爰?jí)別唯欣,同一機(jī)房?jī)?nèi)部能夠做到幾毫秒;分布在不同地方的機(jī)房搬味,傳輸耗時(shí)需要幾十甚至上百毫秒境氢。例如,從廣州機(jī)房到北京機(jī)房身腻,穩(wěn)定情況下 ping 延時(shí)大約是 50ms,不穩(wěn)定情況下可能達(dá)到 1s 甚至更多匹厘。

雖然毫秒對(duì)于人來說幾乎沒有什么感覺嘀趟,但是對(duì)于高可用系統(tǒng)來說,就是本質(zhì)上的不同愈诚,這意味著整個(gè)系統(tǒng)在某個(gè)時(shí)間點(diǎn)上她按,數(shù)據(jù)肯定是不一致的。按照“數(shù)據(jù) + 邏輯 = 業(yè)務(wù)”這個(gè)公式來套的話炕柔,數(shù)據(jù)不一致酌泰,即使邏輯一致,最后的業(yè)務(wù)表現(xiàn)就不一樣了匕累。

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

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

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

CAP 定理

在理論計(jì)算機(jī)科學(xué)中堤结,CAP定理(CAP theorem)唆迁,又被稱作布魯爾定理(Brewer's theorem),它指出對(duì)于一個(gè)分布式計(jì)算系統(tǒng)來說竞穷,不可能同時(shí)滿足以下三點(diǎn):

  • 一致性(Consistence)等同于所有節(jié)點(diǎn)訪問同一份最新的數(shù)據(jù)副本唐责。
  • 可用性(Availability)每次請(qǐng)求都能獲取到非錯(cuò)的響應(yīng)——但是不保證獲取的數(shù)據(jù)為最新數(shù)據(jù)。
  • 分區(qū)容錯(cuò)性(Partition tolerance)以實(shí)際效果而言瘾带,分區(qū)相當(dāng)于對(duì)通信的時(shí)限要求鼠哥。系統(tǒng)如果不能在時(shí)限內(nèi)達(dá)成數(shù)據(jù)一致性,就意味著發(fā)生了分區(qū)的情況,必須就當(dāng)前操作在C和A之間做出選擇肴盏。

根據(jù)定理科盛,分布式系統(tǒng)只能滿足三項(xiàng)中的兩項(xiàng)而不可能滿足全部三項(xiàng)。理解 CAP 理論的最簡(jiǎn)單方式是想象兩個(gè)節(jié)點(diǎn)分處分區(qū)兩側(cè)菜皂。允許至少一個(gè)節(jié)點(diǎn)更新狀態(tài)會(huì)導(dǎo)致數(shù)據(jù)不一致贞绵,即喪失了 C 性質(zhì)。如果為了保證數(shù)據(jù)一致性恍飘,將分區(qū)一側(cè)的節(jié)點(diǎn)設(shè)置為不可用榨崩,那么又喪失了 A 性質(zhì)。除非兩個(gè)節(jié)點(diǎn)可以互相通信章母,才能既保證 C 又保證 A母蛛,這又會(huì)導(dǎo)致喪失 P 性質(zhì)。

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

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

獨(dú)裁式

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

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

協(xié)商式

協(xié)商式?jīng)Q策指的是兩個(gè)獨(dú)立的個(gè)體通過交流信息弥姻,然后根據(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)問題(比如主備連接中斷)鳄乏,此時(shí)狀態(tài)決策應(yīng)該怎么做。

  • 如果備機(jī)在連接中斷的情況下認(rèn)為主機(jī)故障棘利,那么備機(jī)需要升級(jí)為主機(jī)橱野,但實(shí)際上此時(shí)主機(jī)并沒有故障,那么系統(tǒng)就出現(xiàn)了兩個(gè)主機(jī)善玫,這與設(shè)計(jì)初衷(1 主 1 備)是不符合的水援。
  • 如果備機(jī)在連接中斷的情況下不認(rèn)為主機(jī)故障,則此時(shí)如果主機(jī)真的發(fā)生故障茅郎,那么系統(tǒng)就沒有主機(jī)了蜗元,這同樣與設(shè)計(jì)初衷(1 主 1 備)是不符合的。
  • 如果為了規(guī)避連接中斷對(duì)狀態(tài)決策帶來的影響只洒,可以增加更多的連接许帐。例如,雙連接毕谴、三連接成畦。這樣雖然能夠降低連接中斷對(duì)狀態(tài)帶來的影響(注意:只能降低,不能徹底解決)涝开,但同時(shí)又引入了這幾條連接之間信息取舍的問題循帐,即如果不同連接傳遞的信息不同,應(yīng)該以哪個(gè)連接為準(zhǔn)舀武?實(shí)際上這也是一個(gè)無解的答案拄养,無論以哪個(gè)連接為準(zhǔn),在特定場(chǎng)景下都可能存在問題银舱。

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

民主式

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

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

除了算法復(fù)雜捅儒,民主式?jīng)Q策還有一個(gè)固有的缺陷:腦裂。這個(gè)詞來源于醫(yī)學(xué)振亮,指人體左右大腦半球的連接被切斷后野芒,左右腦因?yàn)闊o法交換信息,導(dǎo)致各自做出決策双炕,然后身體受到兩個(gè)大腦分別控制狞悲,會(huì)做出各種奇怪的動(dòng)作。例如:當(dāng)一個(gè)腦裂患者更衣時(shí)妇斤,他有時(shí)會(huì)一只手將褲子拉起摇锋,另一只手卻將褲子往下脫。腦裂的根本原因是站超,原來統(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)中斷仰剿,無法進(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)就混亂了。

為了解決腦裂問題术辐,民主式?jīng)Q策的系統(tǒng)一般都采用“投票節(jié)點(diǎn)數(shù)必須超過系統(tǒng)總節(jié)點(diǎn)數(shù)一半”規(guī)則來處理砚尽。如圖中那種情況,節(jié)點(diǎn) 4 和節(jié)點(diǎn) 5 形成的子集群總節(jié)點(diǎn)數(shù)只有 2 個(gè)辉词,沒有達(dá)到總節(jié)點(diǎn)數(shù) 5 個(gè)的一半必孤,因此這個(gè)子集群不會(huì)進(jìn)行選舉。這種方式雖然解決了腦裂問題瑞躺,但同時(shí)降低了系統(tǒng)整體的可用性敷搪,即如果系統(tǒng)不是因?yàn)槟X裂問題導(dǎo)致投票節(jié)點(diǎn)數(shù)過少,而真的是因?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 是正常的岸售。

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

本節(jié)總結(jié)

高可用與高性能,是架構(gòu)設(shè)計(jì)中兩個(gè)非常重要的決策因素腻惠。因此弛姜,面對(duì)不同業(yè)務(wù)系統(tǒng)的不同需求,對(duì)高可用與高性能也會(huì)有不同的決策結(jié)論妖枚,其實(shí)現(xiàn)的復(fù)雜度也各不相同廷臼。支付寶業(yè)務(wù),對(duì)于可用性和性能就會(huì)有很高的要求绝页,在可用性方面希望能提供 7*24 不間斷服務(wù)荠商,在高性能方面則希望能實(shí)時(shí)收付款;而對(duì)于一個(gè)學(xué)生管理系統(tǒng)续誉,在可用性與性能方面就不一定要有多高的要求莱没,比如晚上可關(guān)機(jī),幾秒內(nèi)能查詢到信息也可接受酷鸦。為此饰躲,高可用性與高性能的復(fù)雜度討論需要結(jié)合業(yè)務(wù)需求牙咏。

什么是可用性

定義可用性,可以先定義什么是不可用嘹裂。需要經(jīng)歷若干環(huán)節(jié)妄壶,網(wǎng)站的頁(yè)面才能呈現(xiàn)在最終的用戶面前;而其中的任何一個(gè)環(huán)節(jié)出現(xiàn)了故障寄狼,都可能會(huì)導(dǎo)致網(wǎng)站的頁(yè)面不可訪問丁寄,也就是出現(xiàn)了網(wǎng)站不可用的情況。昨夜 iOS 版本 QQ 出現(xiàn)大面積閃退就是一個(gè)系統(tǒng)不可用的典型案例泊愧。

我們可以利用百分比來對(duì)網(wǎng)站可用性進(jìn)行度量:

  • 網(wǎng)站不可用時(shí)間 = 完成故障修復(fù)的時(shí)間點(diǎn) - 故障發(fā)現(xiàn)的時(shí)間點(diǎn)
  • 網(wǎng)站年度可用時(shí)間 = 年度總時(shí)間 - 網(wǎng)站不可用時(shí)間
  • 網(wǎng)站年度可用性 = (網(wǎng)站年度可用時(shí)間 / 年度總時(shí)間) x 100%

舉例:一些知名大型網(wǎng)站的可用性可達(dá)到 99.99%(俗稱 4 個(gè) 9)伊磺,我們可以算一下一年下來留給處理故障的時(shí)間有多少?

年度總時(shí)間 = 365 \* 24 \* 60 = 525600 分鐘
網(wǎng)站不可用時(shí)間 = 525600 \* (1 - 99.99%) = 52.56 分鐘

也就是删咱,如果網(wǎng)站要達(dá)到 4 個(gè) 9 的可用性屑埋,一年下來網(wǎng)站不可用時(shí)間最多 53 分鐘(也就是不足 1 個(gè)小時(shí))。

可見痰滋,高可用性就是技術(shù)實(shí)力的象征雀彼,高可用性就是競(jìng)爭(zhēng)力。

為什么會(huì)出現(xiàn)不可用

硬件故障即寡。網(wǎng)站多運(yùn)行在普通的商用服務(wù)器徊哑,而這些服務(wù)器本身就不具備高可用性,再加之網(wǎng)站系統(tǒng)背后有數(shù)量眾多服務(wù)器聪富,那么一定時(shí)間內(nèi)服務(wù)器宕機(jī)是大概率事件莺丑,直接導(dǎo)致部署在該服務(wù)器上的服務(wù)受影響。

軟件 BUG 或網(wǎng)站更新升級(jí)發(fā)布墩蔓。BUG 不能消滅梢莽,只能減少;上線后的系統(tǒng)在運(yùn)行過程中奸披,難免會(huì)出現(xiàn)故障昏名,而這些故障同樣直接導(dǎo)致某些網(wǎng)站服務(wù)不可用;此外阵面,網(wǎng)站更新升級(jí)發(fā)布也會(huì)引起相對(duì)較頻繁的服務(wù)器宕機(jī)轻局。

不可抗拒力。如地震样刷、水災(zāi)仑扑、戰(zhàn)爭(zhēng)等。

如何做到高可用

核心思想:網(wǎng)站高可用的主要技術(shù)手段是服務(wù)與數(shù)據(jù)的冗余備份與失效轉(zhuǎn)移置鼻。同一服務(wù)組件部署在多臺(tái)服務(wù)器上镇饮;數(shù)據(jù)存儲(chǔ)在多臺(tái)服務(wù)器上互相備份。通過上述技術(shù)手段箕母,當(dāng)任何一臺(tái)服務(wù)器宕機(jī)或出現(xiàn)各種不可預(yù)期的問題時(shí)储藐,就將相應(yīng)的服務(wù)切換到其他可用的服務(wù)器上俱济,不影響系統(tǒng)的整體可用性,也不會(huì)導(dǎo)致數(shù)據(jù)丟失钙勃。

從架構(gòu)角度看可用性:當(dāng)前網(wǎng)站系統(tǒng)多采用經(jīng)典的分層模型蛛碌,從上到下為:應(yīng)用層、服務(wù)層與數(shù)據(jù)層肺缕。應(yīng)用層主要實(shí)現(xiàn)業(yè)務(wù)邏輯處理;服務(wù)層提供可復(fù)用的服務(wù)授帕;數(shù)據(jù)層負(fù)責(zé)數(shù)據(jù)讀寫同木;在部署架構(gòu)上常采用應(yīng)用和數(shù)據(jù)分離部署,應(yīng)用會(huì)部署到不同服務(wù)器上跛十,這些服務(wù)器被稱為應(yīng)用層的服務(wù)器彤路;這些可復(fù)用的服務(wù)也會(huì)各自部署在不同服務(wù)器上,稱為服務(wù)層的服務(wù)器芥映;而各類數(shù)據(jù)庫(kù)系統(tǒng)洲尊、文件柜等數(shù)據(jù)則部署在數(shù)據(jù)層的服務(wù)器。

硬件故障方面引起不可用的技術(shù)解決措施

  • 應(yīng)用服務(wù)器奈偏∥豚郑可通過負(fù)載均衡設(shè)備將多個(gè)應(yīng)用服務(wù)器構(gòu)建為集群對(duì)外提供服務(wù)(前提是這些服務(wù)需要設(shè)計(jì)為無狀態(tài),即應(yīng)用服務(wù)器不保存業(yè)務(wù)的上下文信息惊来,而僅根據(jù)每次請(qǐng)求提交的數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯的操作響應(yīng))丽涩,當(dāng)均衡設(shè)備通過心跳檢測(cè)手段檢測(cè)到應(yīng)用服務(wù)器不可用時(shí),則將其從集群中移除裁蚁,并將請(qǐng)求切換到其他可用的應(yīng)用服務(wù)上矢渊。
  • 服務(wù)層服務(wù)器。這些服務(wù)器被應(yīng)用層通過分布式服務(wù)框架(如Dubbo)訪問枉证,分布式服務(wù)框架可在應(yīng)用層客戶端程序中實(shí)現(xiàn)軟件負(fù)載均衡矮男,并通過服務(wù)注冊(cè)中心提供服務(wù)的服務(wù)器進(jìn)行心跳檢測(cè),當(dāng)發(fā)現(xiàn)有服務(wù)器不可用時(shí)室谚,立即通知客戶端程序修改服務(wù)列表毡鉴,同時(shí)移除響應(yīng)的服務(wù)器。
  • 數(shù)據(jù)服務(wù)器秒赤。需要在數(shù)據(jù)寫入時(shí)進(jìn)行數(shù)據(jù)同步復(fù)制眨补,將數(shù)據(jù)寫入多臺(tái)服務(wù)器上,實(shí)現(xiàn)數(shù)據(jù)冗余備份倒脓;當(dāng)數(shù)據(jù)服務(wù)器宕機(jī)時(shí)撑螺,應(yīng)用程序?qū)⒃L問切換到有備份數(shù)據(jù)的服務(wù)器上。

軟件方面引起不可用的技術(shù)解決措施

  • 通過軟件開發(fā)過程進(jìn)行質(zhì)量保證崎弃。
  • 通過預(yù)發(fā)布驗(yàn)證甘晤、嚴(yán)格測(cè)試含潘、灰度發(fā)布等手段,盡量減少上線服務(wù)的故障线婚。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遏弱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子塞弊,更是在濱河造成了極大的恐慌漱逸,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件游沿,死亡現(xiàn)場(chǎng)離奇詭異饰抒,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诀黍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門袋坑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人眯勾,你說我怎么就攤上這事枣宫。” “怎么了吃环?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵也颤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我郁轻,道長(zhǎng)歇拆,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任范咨,我火速辦了婚禮故觅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘渠啊。我一直安慰自己输吏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布替蛉。 她就那樣靜靜地躺著贯溅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪躲查。 梳的紋絲不亂的頭發(fā)上它浅,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音镣煮,去河邊找鬼姐霍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的镊折。 我是一名探鬼主播胯府,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼恨胚!你這毒婦竟也來了骂因?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤赃泡,失蹤者是張志新(化名)和其女友劉穎寒波,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體升熊,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡俄烁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了僚碎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片猴娩。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡阴幌,死狀恐怖勺阐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情矛双,我是刑警寧澤渊抽,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站议忽,受9級(jí)特大地震影響懒闷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜栈幸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一愤估、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧速址,春花似錦玩焰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至并炮,卻和暖如春默刚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逃魄。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工荤西, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓皂冰,卻偏偏與公主長(zhǎng)得像店展,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子秃流,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • feisky云計(jì)算赂蕴、虛擬化與Linux技術(shù)筆記posts - 1014, comments - 298, trac...
    不排版閱讀 3,833評(píng)論 0 5
  • 網(wǎng)站的可用性強(qiáng)調(diào)的是對(duì)最終用戶的使用價(jià)值。它牽動(dòng)著人們的神經(jīng)舶胀,直接影響著公司的形象和利益概说,許多互聯(lián)網(wǎng)公司都將網(wǎng)站的...
    deniro閱讀 3,647評(píng)論 0 18
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)嚣伐,斷路器糖赔,智...
    卡卡羅2017閱讀 134,637評(píng)論 18 139
  • 一、 設(shè)計(jì)理念 1.空間換時(shí)間 1)多級(jí)緩存轩端,靜態(tài)化 客戶端頁(yè)面緩存(http header中包含Expires/...
    零一間閱讀 1,596評(píng)論 0 13
  • 我有兩個(gè)最好的朋友放典,她們們倆個(gè)是我在學(xué)校最要好的朋友。 一個(gè)是自己班的李美丹基茵,一個(gè)是六四班的...
    Lcr_閱讀 410評(píng)論 0 0