分布式系統(tǒng)-容錯(cuò)設(shè)計(jì)

如果一個(gè)服務(wù)器出問(wèn)題的概率是a
那么遵堵,一個(gè)集群所有服務(wù)器同時(shí)都出問(wèn)題的概率是a^n箱玷,概率是相當(dāng)小的怨规;
但是,一個(gè)集群所有服務(wù)器同時(shí)都不出問(wèn)題的概率是(1-a)^n锡足,概率也是相當(dāng)小的波丰;
再加上集群有大量的通信,所以做分布式系統(tǒng)的時(shí)候舶得,必須要意識(shí)到你的系統(tǒng)必定時(shí)常內(nèi)部會(huì)出各種小問(wèn)題掰烟,你必須要設(shè)法使用乾坤大挪移化解掉這些問(wèn)題,不然就尷尬了沐批;

下面是一套內(nèi)功心法纫骑,大俠請(qǐng)收好:

1.冪等

  • 前置條件:無(wú)
  • 原因:不管是業(yè)務(wù)重試,框架產(chǎn)生的重試珠插,還是網(wǎng)絡(luò)層重傳導(dǎo)致的重試惧磺,都有可能讓一個(gè)請(qǐng)求發(fā)送多次;你必須保證捻撑,一個(gè)相同的請(qǐng)求發(fā)送2次甚至N次,產(chǎn)生的效果是一樣的缤底,不會(huì)因?yàn)榘l(fā)送了多次產(chǎn)生副作用顾患;
  • 使用方式:大部分請(qǐng)求都有時(shí)效性,同樣的請(qǐng)求隔了幾個(gè)小時(shí)再發(fā)送過(guò)來(lái)个唧,大概率是新的業(yè)務(wù)而不會(huì)是導(dǎo)致的重試江解;因此冪等保證只要在一定時(shí)間內(nèi),重復(fù)的請(qǐng)求你不再消費(fèi)即可徙歼;常用方式是采用一個(gè)分布式的緩存犁河,記錄請(qǐng)求中唯一標(biāo)識(shí)的requestId或者訂單ID,對(duì)于每個(gè)請(qǐng)求魄梯,都判斷一下是否有緩存記錄桨螺,有則直接跳過(guò)請(qǐng)求,或者返回第一次消費(fèi)得到的結(jié)果(看上層業(yè)務(wù)需求)酿秸;緩存的超時(shí)時(shí)間即為請(qǐng)求的有效判斷時(shí)間灭翔;

2.重試

  • 前置條件:冪等
  • 原因: 分布式系統(tǒng)中,請(qǐng)求未到達(dá)辣苏、或者請(qǐng)求失敗時(shí)肝箱,這種失敗很有可能是臨時(shí)的,不是永久的稀蟋,重新發(fā)送請(qǐng)求有可能成功煌张;
  • 使用方式:重試必須先實(shí)現(xiàn)冪等,否則會(huì)破壞業(yè)務(wù)退客;重試頻率一般采用“有限次”骏融、“指數(shù)級(jí)避退”,同一個(gè)請(qǐng)求,成功率是逐次遞減的绎谦,因此重試的頻率也應(yīng)該逐漸降低管闷,否則會(huì)浪費(fèi)系統(tǒng)資源,重試的次數(shù)必須有限窃肠,否則容易產(chǎn)生死循環(huán)包个;重試的情況建議列白名單去重試,拒絕無(wú)腦重試冤留;

3.異步

  • 前置條件:冪等碧囊、重試
  • 原因:分布式系統(tǒng)中,一個(gè)請(qǐng)求可能需要經(jīng)歷好多個(gè)節(jié)點(diǎn)纤怒,請(qǐng)求完成的時(shí)間可能會(huì)較長(zhǎng)糯而,并且受整個(gè)集群網(wǎng)絡(luò)和性能狀態(tài)影響,請(qǐng)求完成的時(shí)間會(huì)發(fā)生較大波動(dòng)泊窘;這個(gè)時(shí)間對(duì)于系統(tǒng)來(lái)說(shuō)會(huì)偏長(zhǎng)熄驼,但是對(duì)于業(yè)務(wù)來(lái)說(shuō)尚可接受;這個(gè)時(shí)候如果采用同步的方式調(diào)用烘豹,會(huì)有大量的等待線程瓜贾,并且伴有大量的超時(shí)失敗,等待的時(shí)候也不知道對(duì)方是因?yàn)闆](méi)收到請(qǐng)求沒(méi)回携悯,還是受到了請(qǐng)求沒(méi)處理完成沒(méi)回祭芦;但是異步方式,如果請(qǐng)求都沒(méi)接收到憔鬼,可以快速重試來(lái)保證接收到龟劲,這個(gè)時(shí)候要求已經(jīng)實(shí)現(xiàn)了冪等和重試;
  • 使用方式:請(qǐng)求響應(yīng)式轴或,通過(guò)rpc框架發(fā)送請(qǐng)求后立即返回(一般返回成功則表明對(duì)方已經(jīng)接收到請(qǐng)求)昌跌,通過(guò)rpc輪詢(xún)讀取結(jié)果或者通過(guò)發(fā)送請(qǐng)求時(shí)提供的回調(diào)接口返回結(jié)果;事件驅(qū)動(dòng)式侮叮,通過(guò)mafka等消息中間件避矢,請(qǐng)求方發(fā)送請(qǐng)求至消息中間件,被調(diào)用方消費(fèi)中間件的消息跑業(yè)務(wù)囊榜,并且將結(jié)果放到消息中間件中审胸,請(qǐng)求發(fā)送方也通過(guò)消費(fèi)中間件消息獲取結(jié)果;實(shí)際使用中卸勺,這兩種方式是綜合使用的砂沛,比如請(qǐng)求響應(yīng)式的結(jié)果返回可以加上消息中間件作為補(bǔ)償,也可以直接替換成消息中間件方式曙求;

4.隔板

  • 前置條件:無(wú)
  • 原因:核心邏輯一般是必須要全部成功的碍庵,但是有些非核心邏輯映企,失敗了也并不打緊,或者成功一部分即可静浴;這個(gè)時(shí)候要把這些非核心邏輯和核心邏輯之間進(jìn)行隔離堰氓,或者非核心邏輯之間進(jìn)行隔離;
    隔板設(shè)計(jì)是模仿船舶設(shè)計(jì)的苹享,一個(gè)隔板內(nèi)漏水不至于整條船沉沒(méi)


    image.png

    泰坦尼克號(hào)是隔板設(shè)計(jì)的失敗案例双絮,隔板設(shè)計(jì)不合理,導(dǎo)致船舶傾斜得问,最終沉沒(méi)


    image.png
  • 使用方式:JAVA中常對(duì)非核心業(yè)務(wù)進(jìn)行分別的try...catch...囤攀,一個(gè)業(yè)務(wù)失敗時(shí)也就打個(gè)日志,并不會(huì)影響整體業(yè)務(wù)宫纬;

5.補(bǔ)償事務(wù)

  • 前置條件:隔板
  • 原因:一條路不通了焚挠,可以試試另外一條路,總之達(dá)到目的就行漓骚;比如你要發(fā)條消息給客戶(hù)蝌衔,微信發(fā)不通了,試試短信么蝌蹂。
  • 使用方式:業(yè)務(wù)邏輯中做業(yè)務(wù)補(bǔ)充即可胚委,做好隔板,某項(xiàng)失敗時(shí)不要影響整體業(yè)務(wù)叉信;

6.降級(jí)

  • 前置條件:無(wú)
  • 原因:降級(jí)分為自動(dòng)降級(jí)和手動(dòng)降級(jí),自動(dòng)降級(jí)部分類(lèi)似于補(bǔ)償事務(wù)艘希,但是在很多情況下是影響全局的硼身,當(dāng)檢測(cè)到問(wèn)題時(shí),整個(gè)系統(tǒng)都對(duì)這個(gè)業(yè)務(wù)進(jìn)行了業(yè)務(wù)替代覆享;
  • 使用方式:一種是自動(dòng)檢測(cè)并做業(yè)務(wù)替代佳遂,類(lèi)似于補(bǔ)償事務(wù);一種是做全局開(kāi)關(guān)撒顿,這種開(kāi)關(guān)可以是系統(tǒng)自動(dòng)打開(kāi)丑罪,或者人工進(jìn)行打開(kāi);

7.熔斷和限流

  • 前置條件:冪等凤壁、重試
  • 原因:熔斷和限流是為了應(yīng)對(duì)性能過(guò)載的情形吩屹,與其全部業(yè)務(wù)失敗,不如拒絕部分業(yè)務(wù)拧抖,并將剩余業(yè)務(wù)順利完成煤搜;大部分性能過(guò)載是因?yàn)橐粋€(gè)流量突刺,如果已經(jīng)設(shè)計(jì)好了冪等和重試唧席,那么被拒絕的請(qǐng)求將會(huì)重新發(fā)送過(guò)來(lái)擦盾,那時(shí)系統(tǒng)可能已經(jīng)緩過(guò)勁來(lái)嘲驾,可以重新處理請(qǐng)求了;特別是一個(gè)集群中迹卢,只有一臺(tái)服務(wù)器性能過(guò)載的情況辽故,現(xiàn)在集群大部分都通過(guò)nginx路由,被拒絕的請(qǐng)求腐碱,上層會(huì)重新發(fā)送并被路由到其他服務(wù)器誊垢;如果你的系統(tǒng)一直處于性能過(guò)載狀態(tài),那時(shí)只能拓展你的資源喻杈,或者從其他架構(gòu)層面去優(yōu)化性能了彤枢;
  • 使用方式:一般通過(guò)限制QPS進(jìn)行判斷,單機(jī)或者整個(gè)集群達(dá)到一定QPS時(shí)筒饰,自動(dòng)打開(kāi)限流或者熔斷開(kāi)關(guān)缴啡;QPS可以做很多級(jí)別的限制,比如某個(gè)接口瓷们,或者針對(duì)某個(gè)調(diào)用服務(wù)器的外部業(yè)務(wù)业栅;也可以做手動(dòng)開(kāi)關(guān),應(yīng)對(duì)緊急情況谬晕;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碘裕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子攒钳,更是在濱河造成了極大的恐慌帮孔,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件不撑,死亡現(xiàn)場(chǎng)離奇詭異文兢,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)焕檬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)姆坚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人实愚,你說(shuō)我怎么就攤上這事兼呵。” “怎么了腊敲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵击喂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我兔仰,道長(zhǎng)茫负,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任乎赴,我火速辦了婚禮忍法,結(jié)果婚禮上潮尝,老公的妹妹穿的比我還像新娘。我一直安慰自己饿序,他們只是感情好勉失,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著原探,像睡著了一般乱凿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咽弦,一...
    開(kāi)封第一講書(shū)人閱讀 49,985評(píng)論 1 291
  • 那天徒蟆,我揣著相機(jī)與錄音,去河邊找鬼型型。 笑死段审,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的闹蒜。 我是一名探鬼主播寺枉,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绷落!你這毒婦竟也來(lái)了姥闪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤砌烁,失蹤者是張志新(化名)和其女友劉穎筐喳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體函喉,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡疏唾,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了函似。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喉童,死狀恐怖撇寞,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情堂氯,我是刑警寧澤蔑担,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站咽白,受9級(jí)特大地震影響啤握,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晶框,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一排抬、第九天 我趴在偏房一處隱蔽的房頂上張望懂从。 院中可真熱鬧,春花似錦蹲蒲、人聲如沸番甩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缘薛。三九已至,卻和暖如春卡睦,著一層夾襖步出監(jiān)牢的瞬間宴胧,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工表锻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恕齐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓浩嫌,卻偏偏與公主長(zhǎng)得像檐迟,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子码耐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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

  • 一追迟、交易型系統(tǒng)設(shè)計(jì)的一些原則 1.在設(shè)計(jì)系統(tǒng)時(shí),應(yīng)該多思考墨菲定律: * 任何事情都沒(méi)有表面看起來(lái)那么簡(jiǎn)單 * 所...
    ZyBlog閱讀 13,097評(píng)論 2 48
  • 概念:微服務(wù)就是一些可獨(dú)立運(yùn)行骚腥、可協(xié)同工作的小的服務(wù)敦间。微服務(wù)是現(xiàn)在特別流行的服務(wù),微服務(wù)的字面意思是大家都很好理解...
    程序員技術(shù)圈閱讀 3,339評(píng)論 2 47
  • 1. Infinispan是什么束铭? 下述截自官方描述:Infinispan是基于Apache 2.0協(xié)議的分布式鍵...
    隨安居士閱讀 11,526評(píng)論 0 4
  • 分布式系統(tǒng)面臨的第一個(gè)問(wèn)題就是數(shù)據(jù)分布廓块,即將數(shù)據(jù)均勻地分布到多個(gè)存儲(chǔ)節(jié)點(diǎn)。另外契沫,為了保證可靠性和可用性带猴,需要將數(shù)據(jù)...
    olostin閱讀 4,561評(píng)論 2 26
  • 中午照例去公司附近的公園散步練習(xí)聽(tīng)力会通。一進(jìn)門(mén)右前方一排海棠已開(kāi)花口予,遠(yuǎn)看就像葉中綴滿(mǎn)白粉色棉花球。 海棠還是要近看的...
    FAN心理閱讀 411評(píng)論 0 0