七、微服務(wù)架構(gòu)中的“雪崩效應(yīng)”

1. 雪崩效應(yīng)

  1. 在微服務(wù)架構(gòu)中突硝,我們將業(yè)務(wù)拆分成一個(gè)個(gè)的服務(wù)测摔,服務(wù)與服務(wù)之間可以相互調(diào)用,但是由于網(wǎng)絡(luò)
    原因或者自身的原因狞换,服務(wù)并不能保證服務(wù)的100%可用,如果單個(gè)服務(wù)出現(xiàn)問(wèn)題舟肉,調(diào)用這個(gè)服務(wù)就會(huì)
    出現(xiàn)網(wǎng)絡(luò)延遲修噪,此時(shí)若有大量的網(wǎng)絡(luò)涌入,會(huì)形成任務(wù)堆積路媚,最終導(dǎo)致服務(wù)癱瘓黄琼。
    其實(shí),在單體服務(wù)中,高并發(fā)也會(huì)導(dǎo)致服務(wù)癱瘓脏款。見(jiàn)下一章围苫,Jmeter模擬微服務(wù)當(dāng)中的高并發(fā)場(chǎng)景
  2. 在分布式系統(tǒng)中,由于網(wǎng)絡(luò)原因或自身的原因,服務(wù)一般無(wú)法保證 100% 可用。如果一個(gè)服務(wù)出現(xiàn)了
    問(wèn)題撤师,調(diào)用這個(gè)服務(wù)就會(huì)出現(xiàn)線程阻塞的情況剂府,此時(shí)若有大量的請(qǐng)求涌入,就會(huì)出現(xiàn)多條線程阻塞等
    待剃盾,進(jìn)而導(dǎo)致服務(wù)癱瘓腺占。
  3. 由于服務(wù)與服務(wù)之間的依賴性,故障會(huì)傳播痒谴,會(huì)對(duì)整個(gè)微服務(wù)系統(tǒng)造成災(zāi)難性的嚴(yán)重后果衰伯,這就是服務(wù)故障的 “雪崩效應(yīng)” 。見(jiàn)下圖示:


    雪崩效應(yīng)圖示.png
  4. 雪崩發(fā)生的原因多種多樣积蔚,有不合理的容量設(shè)計(jì)意鲸,或者是高并發(fā)下某一個(gè)方法響應(yīng)變慢,亦或是某
    臺(tái)機(jī)器的資源耗盡尽爆。我們無(wú)法完全杜絕雪崩源頭的發(fā)生怎顾,只有做好足夠的容錯(cuò),保證在一個(gè)服務(wù)發(fā)生問(wèn)
    題教翩,不會(huì)影響到其它服務(wù)的正常運(yùn)行杆勇。也就是"雪落而不雪崩"。

2. 微服務(wù)中常見(jiàn)的容錯(cuò)方案

要防止雪崩的擴(kuò)散饱亿,我們就要做好服務(wù)的容錯(cuò)蚜退,容錯(cuò)說(shuō)白了就是保護(hù)自己不被豬隊(duì)友拖垮的一些措施, 常見(jiàn)的服務(wù)容錯(cuò)思路有:

  • 隔離
  • 超時(shí)
  • 限流
  • 熔斷
  • 降級(jí)
2.1 隔離

它是指將系統(tǒng)按照一定的原則劃分為若干個(gè)服務(wù)模塊,各個(gè)模塊之間相對(duì)獨(dú)立彪笼,無(wú)強(qiáng)依賴钻注。當(dāng)有故障發(fā)生時(shí),能將問(wèn)題和影響隔離在某個(gè)模塊內(nèi)部配猫,而不擴(kuò)散風(fēng)險(xiǎn)幅恋,不波及其它模塊,不影響整體的系統(tǒng)服務(wù)泵肄。常見(jiàn)的隔離方式有:線程池隔離和信號(hào)量隔離.

2.2 超時(shí)

在上游服務(wù)調(diào)用下游服務(wù)的時(shí)候捆交,設(shè)置一個(gè)最大響應(yīng)時(shí)間,如果超過(guò)這個(gè)時(shí)間腐巢,下游未作出反應(yīng)品追,
就斷開(kāi)請(qǐng)求,釋放掉線程冯丙。

2.3 限流

限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的肉瓦。為了保證系統(tǒng)的穩(wěn)固運(yùn)行,一旦達(dá)到
的需要限制的閾值,就需要限制流量并采取少量措施以完成限制流量的目的。

2.4 熔斷

在互聯(lián)網(wǎng)系統(tǒng)中,當(dāng)下游服務(wù)因訪問(wèn)壓力過(guò)大而響應(yīng)變慢或失敗泞莉,上游服務(wù)為了保護(hù)系統(tǒng)整體的可用性哪雕,可以暫時(shí)切斷對(duì)下游服務(wù)的調(diào)用。這種犧牲局部鲫趁,保全整體的措施就叫做熔斷斯嚎。
服務(wù)熔斷一般有三種狀態(tài):

  • 熔斷關(guān)閉狀態(tài)(Closed)
    服務(wù)沒(méi)有故障時(shí),熔斷器所處的狀態(tài)饮寞,對(duì)調(diào)用方的調(diào)用不做任何限制
  • 熔斷開(kāi)啟狀態(tài)(Open)
    后續(xù)對(duì)該服務(wù)接口的調(diào)用不再經(jīng)過(guò)網(wǎng)絡(luò)孝扛,直接執(zhí)行本地的fallback方法
  • 半熔斷狀態(tài)(Half-Open)
    嘗試恢復(fù)服務(wù)調(diào)用,允許有限的流量調(diào)用該服務(wù)幽崩,并監(jiān)控調(diào)用成功率苦始。如果成功率達(dá)到預(yù)
    期,則說(shuō)明服務(wù)已恢復(fù)慌申,進(jìn)入熔斷關(guān)閉狀態(tài)陌选;如果成功率仍舊很低,則重新進(jìn)入熔斷關(guān)閉狀
    態(tài)蹄溉。
2.5 降級(jí)

降級(jí)其實(shí)就是為服務(wù)提供一個(gè)托底方案咨油,一旦服務(wù)無(wú)法正常調(diào)用,就使用托底方案柒爵。

3. 常見(jiàn)的容錯(cuò)組件

3.1 Hystrix

Hystrix是由Netflix開(kāi)源的一個(gè)延遲和容錯(cuò)庫(kù)役电,用于隔離訪問(wèn)遠(yuǎn)程系統(tǒng)、服務(wù)或者第三方庫(kù)棉胀,防止
級(jí)聯(lián)失敗法瑟,從而提升系統(tǒng)的可用性與容錯(cuò)性。

3.2 Resilience4J

Resilicence4J一款非常輕量唁奢、簡(jiǎn)單霎挟,并且文檔非常清晰、豐富的熔斷工具麻掸,這也是Hystrix官方推
薦的替代產(chǎn)品酥夭。不僅如此,Resilicence4j還原生支持Spring Boot 1.x/2.x脊奋,而且監(jiān)控也支持和
prometheus等多款主流產(chǎn)品進(jìn)行整合熬北。

3.3 Sentinel

Sentinel 是阿里巴巴開(kāi)源的一款斷路器實(shí)現(xiàn),本身在阿里內(nèi)部已經(jīng)被大規(guī)模采用诚隙,非常穩(wěn)定讶隐。

下面是三個(gè)組件在各方面的對(duì)比:

Sentinel Hystrix resilience4j
隔離策略 信號(hào)量隔離(并發(fā)線程數(shù)限流) 線程池隔離/信號(hào)量隔離 信號(hào)量隔離
熔斷降級(jí)策略 基于響應(yīng)時(shí)間、異常比率最楷、異常數(shù) 基于異常比率 基于異常比率整份、響應(yīng)時(shí)間
實(shí)時(shí)統(tǒng)計(jì)實(shí)現(xiàn) 滑動(dòng)窗口(LeapArray) 滑動(dòng)窗口(基于 RxJava) Ring Bit Buffer
動(dòng)態(tài)規(guī)則配置 支持多種數(shù)據(jù)源 支持多種數(shù)據(jù)源 有限支持
擴(kuò)展性 多個(gè)擴(kuò)展點(diǎn) 插件的形式 接口的形式
基于注解的支持 支持 支持 支持
限流 基于 QPS,支持基于調(diào)用關(guān)系的限流 有限的支持 Rate Limiter
流量整形 支持預(yù)熱模式籽孙、勻速器模式烈评、預(yù)熱排隊(duì)模式 不支持 簡(jiǎn)單的 Rate Limiter模式
系統(tǒng)自適應(yīng)保護(hù) 支持 不支持 不支持
控制臺(tái) 提供開(kāi)箱即用的控制臺(tái),可配置規(guī)則犯建、查看秒級(jí)監(jiān)控讲冠、機(jī)器發(fā)現(xiàn)等 簡(jiǎn)單的監(jiān)控查看 不提供控制臺(tái),可對(duì)接其它監(jiān)控系統(tǒng)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末适瓦,一起剝皮案震驚了整個(gè)濱河市竿开,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌玻熙,老刑警劉巖否彩,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嗦随,居然都是意外死亡列荔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門枚尼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)贴浙,“玉大人,你說(shuō)我怎么就攤上這事署恍∑槔#” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵盯质,是天一觀的道長(zhǎng)袁串。 經(jīng)常有香客問(wèn)我,道長(zhǎng)唤殴,這世上最難降的妖魔是什么般婆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮朵逝,結(jié)果婚禮上蔚袍,老公的妹妹穿的比我還像新娘。我一直安慰自己配名,他們只是感情好啤咽,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著渠脉,像睡著了一般宇整。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上芋膘,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天鳞青,我揣著相機(jī)與錄音霸饲,去河邊找鬼。 笑死臂拓,一個(gè)胖子當(dāng)著我的面吹牛厚脉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播胶惰,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼傻工,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了孵滞?” 一聲冷哼從身側(cè)響起中捆,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎坊饶,沒(méi)想到半個(gè)月后泄伪,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡匿级,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年臂容,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片根蟹。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡脓杉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出简逮,到底是詐尸還是另有隱情球散,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布散庶,位于F島的核電站蕉堰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏悲龟。R本人自食惡果不足惜屋讶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望须教。 院中可真熱鬧皿渗,春花似錦、人聲如沸轻腺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贬养。三九已至挤土,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間误算,已是汗流浹背仰美。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工迷殿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人咖杂。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓贪庙,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親翰苫。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348