《面試補(bǔ)習(xí)》-熔斷降級(jí)我學(xué)會(huì)了尿这!

概述

高可用三劍客 限流熔斷削峰 終于來到第二篇, 熔斷降級(jí)專題了庆杜,想回顧限流相關(guān)內(nèi)容的童鞋,可以查看一下射众,下面文章,歡迎點(diǎn)贊晃财,收藏叨橱,關(guān)注三連,感謝断盛!

限流系列文章:

僅以兩張圖來初步形容一下 熔斷 適用的場(chǎng)景:

  • 雪崩
image.gif
  • 股災(zāi)
image.gif

什么是熔斷

來自 wiki熔斷機(jī)制 描述:

熔斷機(jī)制(英語:Circuit breaker / Trading curb)指的是在股票市場(chǎng)的交易時(shí)間中伙菜,
當(dāng)價(jià)格波動(dòng)的幅度達(dá)到某一個(gè)限定的目標(biāo)(熔斷點(diǎn))時(shí),對(duì)其暫停交易一段時(shí)間的機(jī)制命迈。
此機(jī)制如同保險(xiǎn)絲在電流過大時(shí)候熔斷贩绕,故而得名。

熔斷機(jī)制推出的目的是為了防范系統(tǒng)性風(fēng)險(xiǎn)壶愤,給市場(chǎng)更多的冷靜時(shí)間丧叽,避免恐慌情緒蔓延導(dǎo)致市場(chǎng)波動(dòng),
從而防止大規(guī)模股價(jià)下跌現(xiàn)象的發(fā)生公你。
然而熔斷機(jī)制也因切斷了資金的流通性踊淳,同樣會(huì)造成市場(chǎng)情緒加大,并令市場(chǎng)風(fēng)險(xiǎn)在熔斷期結(jié)束后繼續(xù)擴(kuò)大。

轉(zhuǎn)換成互聯(lián)網(wǎng)語言可以這么理解:

  • 當(dāng)異常幅度達(dá)到設(shè)定的閥值后觸發(fā)的系統(tǒng)保護(hù)機(jī)制
  • 保護(hù)機(jī)制會(huì)將某部分能力關(guān)閉迂尝,以保證大部分能力正常
  • 這種機(jī)制是有損的脱茉,但是利大于端

熔斷機(jī)制的特點(diǎn),在關(guān)閉一段時(shí)間后垄开,會(huì)自動(dòng)觸發(fā)恢復(fù)檢測(cè)琴许,如果發(fā)現(xiàn)服務(wù)正常,則將服務(wù)逐漸開放溉躲。

1榜田、雪崩效應(yīng)

在分布式服務(wù)部署的架構(gòu)下,整體鏈路可以參考為:

image.png

如果在大促期間锻梳, DB_2 由于 機(jī)器負(fù)載過高箭券,sql執(zhí)行緩慢鏈接數(shù)打滿網(wǎng)絡(luò)抖動(dòng)等情況疑枯,導(dǎo)致 DB_2 不可用辩块,那么整體鏈路的影響就會(huì)變成:

image.png

服務(wù)雪崩的每個(gè)階段都可能由不同的原因造成, 比如造成 服務(wù)不可用 的原因有:

  • 硬件故障
  • 程序Bug
  • 緩存擊穿
  • 用戶大量請(qǐng)求

2、雪崩處理策略

  • 流量控制: 限流削峰都屬于流量控制的一種策略
  • 緩存優(yōu)化: 在上述案例中荆永,DB 由于壓力過大導(dǎo)致的雪崩废亭,可以引入緩存,減輕DB壓力
  • 服務(wù)降級(jí): 通過異常分支鏈路快速失敗具钥,確保主鏈路正常提供服務(wù)
  • 應(yīng)用擴(kuò)容: 針對(duì)機(jī)器壓力過大豆村,負(fù)載過高,可以通過機(jī)器擴(kuò)容來解決骂删,緩解流量壓力

斷路器模式

熔斷器模式(Circuit Breaker Pattern)你画,是一個(gè)現(xiàn)代軟件開發(fā)的設(shè)計(jì)模式。用以偵測(cè)錯(cuò)誤桃漾,并避免不斷地觸發(fā)相同的錯(cuò)誤(如維護(hù)時(shí)服務(wù)不可用坏匪、暫時(shí)性的系統(tǒng)問題或是未知的系統(tǒng)錯(cuò)誤)。

狀態(tài)描述:

  • 關(guān)閉:熔斷器默認(rèn)處于關(guān)閉狀態(tài)撬统,熔斷器本身帶有計(jì)數(shù)能力(如滑動(dòng)窗口實(shí)現(xiàn)),當(dāng)失敗數(shù)量達(dá)到預(yù)設(shè)閥值后适滓,觸發(fā)狀態(tài)變更,熔斷器被打開
  • 開啟:在一定時(shí)間內(nèi)恋追,所有請(qǐng)求都會(huì)被拒絕凭迹,或采用備用鏈路處理。
  • 半開啟: 在刷新時(shí)間窗口后苦囱,會(huì)進(jìn)入半開啟狀態(tài),熔斷器嘗試接受請(qǐng)求嗅绸,如果這階段出現(xiàn)請(qǐng)求失敗,直接恢復(fù)到開啟狀態(tài)撕彤。
image.png

隔離策略

1鱼鸠、線程隔離

Hystrix 采用了 Bulkhead Partition艙壁隔離技術(shù)猛拴,來將外部依賴進(jìn)行資源隔離,進(jìn)而避免任何外部依賴的故障導(dǎo)致本服務(wù)崩潰蚀狰。

艙壁隔離愉昆,是說將船體內(nèi)部空間區(qū)隔劃分成若干個(gè)隔艙,一旦某幾個(gè)隔艙發(fā)生破損進(jìn)水麻蹋,水流不會(huì)在其間相互流動(dòng)跛溉,如此一來船舶在受損時(shí),依然能具有足夠的浮力和穩(wěn)定性扮授,進(jìn)而減低立即沉船的危險(xiǎn)芳室。

image.png

圖片來源: 《防雪崩利器:熔斷器 Hystrix 的原理與使用》

Hystrix 在線程池隔離實(shí)現(xiàn)主要解決一下場(chǎng)景:

在商品詳情系統(tǒng)中,如果沒有對(duì)服務(wù)做降級(jí)措施刹勃,那么當(dāng)評(píng)論服務(wù)出現(xiàn)異常時(shí)堪侯,整個(gè)商品詳情系統(tǒng)都會(huì)受到影響,最終導(dǎo)致用戶無法查看商品詳情深夯。

在這個(gè)例子中抖格,商品詳情服務(wù)诺苹,從請(qǐng)求入口分配線程處理咕晋,對(duì)每個(gè)服務(wù)使用同一個(gè)線程進(jìn)行處理(同步),在評(píng)論服務(wù)出現(xiàn)異常時(shí)(響應(yīng)緩慢收奔,處理超時(shí)掌呜,服務(wù)異常等),導(dǎo)致整個(gè)線程阻塞,服務(wù)端響應(yīng)超時(shí)坪哄,觸發(fā)用戶重試刷新請(qǐng)求质蕉,最終導(dǎo)致服務(wù)雪崩,系統(tǒng)崩潰翩肌。

image.png

Hystrix 線程池隔離方案模暗;

hystrix把每個(gè)依賴都進(jìn)行隔離,對(duì)依賴的調(diào)用全部包裝成HystrixCommand或者HystrixObservableCommand 在服務(wù)調(diào)用時(shí)念祭,分配獨(dú)立的線程池進(jìn)行資源隔離調(diào)用兑宇,如下圖中的評(píng)論服務(wù)出現(xiàn)不可用時(shí),商品詳情系統(tǒng)還是能夠?qū)?code>商品信息粱坤,大促信息封裝好返回給用戶隶糕。評(píng)論服務(wù)的異常,并不會(huì)影響其他依賴的調(diào)用站玄。

image.png

線程隔離特點(diǎn)

優(yōu)點(diǎn):

  • 一個(gè)依賴可以給予一個(gè)線程池枚驻,這個(gè)依賴的異常不會(huì)影響其他的依賴。
  • 使用線程可以完全隔離第三方代碼,請(qǐng)求線程可以快速放回株旷。
  • 當(dāng)一個(gè)失敗的依賴再次變成可用時(shí)再登,線程池將清理,并立即恢復(fù)可用,而不是一個(gè)長(zhǎng)時(shí)間的恢復(fù)霎冯。
  • 可以完全模擬異步調(diào)用铃拇,方便異步編程。
  • 使用線程池沈撞,可以有效的進(jìn)行實(shí)時(shí)監(jiān)控慷荔、統(tǒng)計(jì)和封裝。

缺點(diǎn):

  • 使用線程池的缺點(diǎn)主要是增加了計(jì)算的開銷缠俺。每一個(gè)依賴調(diào)用都會(huì)涉及到隊(duì)列显晶,調(diào)度,上下文切換壹士,而這些操作都有可能在不同的線程中執(zhí)行磷雇。

線程切換的性能損耗問題

Netflix在使用過程中詳細(xì)評(píng)估了使用異步線程同步線程帶來的性能差異,結(jié)果表明在99%的情況下躏救,異步線程帶來的幾毫秒延遲的完全可以接受的

2唯笙、信號(hào)量隔離

Hystrix 的信號(hào)量隔離限制對(duì)某個(gè)資源調(diào)用異常比例

Sentinel 在信號(hào)量隔離的限制上提供了更多的策略選擇盒使,基于慢調(diào)用比例崩掘、異常比例異常數(shù)

信號(hào)量隔離實(shí)現(xiàn)原理

Sentinel 底層采用高性能的滑動(dòng)窗口數(shù)據(jù)結(jié)構(gòu) LeapArray 來統(tǒng)計(jì)實(shí)時(shí)的秒級(jí)指標(biāo)數(shù)據(jù)少办,在 信號(hào)量隔離的底層實(shí)現(xiàn)中苞慢, 通過根據(jù)不同的策略,如 異常數(shù) 策略英妓,統(tǒng)計(jì)在 滑動(dòng)窗口區(qū)間內(nèi)挽放, 異常請(qǐng)求量的比例,來決定對(duì)服務(wù)進(jìn)行熔斷降級(jí)處理蔓纠。

滑動(dòng)窗口示意圖:

image.png

1辑畦、慢調(diào)用比例 (SLOW_REQUEST_RATIO)
設(shè)置允許的慢調(diào)用 RT(即最大的響應(yīng)時(shí)間),請(qǐng)求的響應(yīng)時(shí)間大于該值則統(tǒng)計(jì)為慢調(diào)用腿倚。當(dāng)調(diào)用請(qǐng)求數(shù)量大于閥值纯出,觸發(fā)熔斷。閥值設(shè)置猴誊,100ms響應(yīng)潦刃,10個(gè)請(qǐng)求 如下圖所示:

image.png

2、異常比例 (ERROR_RATIO

當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)內(nèi)請(qǐng)求數(shù)目大于設(shè)置的最小請(qǐng)求數(shù)目懈叹,并且異常的比例大于閾值乖杠,則接下來的熔斷時(shí)長(zhǎng)內(nèi)請(qǐng)求會(huì)自動(dòng)被熔斷。閥值設(shè)置 20% 如下圖所示:

image.png

3澄成、異常數(shù) (ERROR_COUNT)

當(dāng)單位統(tǒng)計(jì)時(shí)長(zhǎng)內(nèi)的異常數(shù)目超過閾值之后會(huì)自動(dòng)進(jìn)行熔斷胧洒。閥值設(shè)置 5 如圖所示:

image.png

熔斷降級(jí)組件對(duì)比

image.png

Sentinel

Sentinel是阿里中間件團(tuán)隊(duì)開源的畏吓,面向分布式服務(wù)架構(gòu)的輕量級(jí)高可用流量控制組件,主要以流量為切入點(diǎn)卫漫,從流量控制菲饼、熔斷降級(jí)、系統(tǒng)負(fù)載保護(hù)等多個(gè)維度來幫助用戶保護(hù)服務(wù)的穩(wěn)定性列赎。

Sentinel 的側(cè)重點(diǎn)在于:

  • 多樣化的流量控制
  • 熔斷降級(jí)
  • 系統(tǒng)負(fù)載保護(hù)
  • 實(shí)時(shí)監(jiān)控和控制臺(tái)

Hystrix

HystrixNetflix開源的一款容錯(cuò)系統(tǒng)宏悦,能幫助使用者碼出具備強(qiáng)大的容錯(cuò)能力和魯棒性的程序。提供降級(jí)包吝,熔斷等功能饼煞。在2018年底,Hystrix在其Github主頁宣布诗越,不再開放新功能砖瞧,推薦開發(fā)者使用其他仍然活躍的開源項(xiàng)目。

官方 wiki 描述:
Hystrix is designed to do the following:

Give protection from and control over latency and failure from dependencies accessed (typically over the network) via third-party client libraries.
Stop cascading failures in a complex distributed system.
Fail fast and rapidly recover.
Fallback and gracefully degrade when possible.
Enable near real-time monitoring, alerting, and operational control.
  1. 對(duì)通過第三方客戶端庫訪問的依賴項(xiàng)(通常是通過網(wǎng)絡(luò))的延遲和故障進(jìn)行保護(hù)和控制嚷狞。
  2. 在復(fù)雜的分布式系統(tǒng)中阻止級(jí)聯(lián)故障块促。
  3. 快速失敗,快速恢復(fù)床未。
  4. 回退竭翠,盡可能優(yōu)雅地降級(jí)。
  5. 啟用近實(shí)時(shí)監(jiān)控即硼、警報(bào)和操作控制逃片。

resilience4j

resilience4j是一個(gè)輕量屡拨、易用只酥、可組裝的高可用框架,支持熔斷呀狼、高頻控制裂允、隔離、限流哥艇、限時(shí)绝编、重試等多種高可用機(jī)制。Netflix 官方在停止維護(hù)Hystrix 后貌踏,推薦使用 resilience4j 作為替代方案十饥。

與Hystrix相比,它有以下一些主要的區(qū)別:

  • Hystrix調(diào)用必須被封裝到HystrixCommand里祖乳,而resilience4j以裝飾器的方式提供對(duì)函數(shù)式接口逗堵、lambda表達(dá)式等的嵌套裝飾,因此你可以用簡(jiǎn)潔的方式組合多種高可用機(jī)制
  • Hystrix的頻次統(tǒng)計(jì)采用滑動(dòng)窗口的方式眷昆,而resilience4j采用環(huán)狀緩沖區(qū)的方式
  • 關(guān)于熔斷器在半開狀態(tài)時(shí)的狀態(tài)轉(zhuǎn)換蜒秤,Hystrix僅使用一次執(zhí)行判定是否進(jìn)行狀態(tài)轉(zhuǎn)換汁咏,而resilience4j則采用可配置的執(zhí)行次數(shù)與閾值,來決定是否進(jìn)行狀態(tài)轉(zhuǎn)換作媚,這種方式提高了熔斷機(jī)制的穩(wěn)定性
  • 關(guān)于隔離機(jī)制攘滩,Hystrix提供基于線程池和信號(hào)量的隔離,而resilience4j只提供基于信號(hào)量的隔離

點(diǎn)關(guān)注纸泡,不迷路

好了各位漂问,以上就是這篇文章的全部?jī)?nèi)容了,我后面會(huì)每周都更新幾篇高質(zhì)量的大廠面試和常用技術(shù)棧相關(guān)的文章女揭。感謝大伙能看到這里级解,如果這個(gè)文章寫得還不錯(cuò), 求三連L锇蟆G诨! 創(chuàng)作不易掩驱,感謝各位的支持和認(rèn)可芒划,我們下篇文章見!

我是 九靈 ,有需要交流的童鞋可以 加我wx欧穴,Jayce-K,關(guān)注公眾號(hào):Java 補(bǔ)習(xí)課民逼,掌握第一手資料!
如果本篇博客有任何錯(cuò)誤涮帘,請(qǐng)批評(píng)指教拼苍,不勝感激 !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末调缨,一起剝皮案震驚了整個(gè)濱河市疮鲫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弦叶,老刑警劉巖俊犯,帶你破解...
    沈念sama閱讀 212,029評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異伤哺,居然都是意外死亡燕侠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,395評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門立莉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绢彤,“玉大人,你說我怎么就攤上這事蜓耻∶2埃” “怎么了?”我有些...
    開封第一講書人閱讀 157,570評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵媒熊,是天一觀的道長(zhǎng)奇适。 經(jīng)常有香客問我坟比,道長(zhǎng),這世上最難降的妖魔是什么嚷往? 我笑而不...
    開封第一講書人閱讀 56,535評(píng)論 1 284
  • 正文 為了忘掉前任葛账,我火速辦了婚禮,結(jié)果婚禮上皮仁,老公的妹妹穿的比我還像新娘籍琳。我一直安慰自己,他們只是感情好贷祈,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,650評(píng)論 6 386
  • 文/花漫 我一把揭開白布趋急。 她就那樣靜靜地躺著,像睡著了一般势誊。 火紅的嫁衣襯著肌膚如雪呜达。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,850評(píng)論 1 290
  • 那天粟耻,我揣著相機(jī)與錄音查近,去河邊找鬼。 笑死挤忙,一個(gè)胖子當(dāng)著我的面吹牛霜威,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播册烈,決...
    沈念sama閱讀 39,006評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼戈泼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了赏僧?” 一聲冷哼從身側(cè)響起大猛,我...
    開封第一講書人閱讀 37,747評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎次哈,沒想到半個(gè)月后胎署,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吆录,經(jīng)...
    沈念sama閱讀 44,207評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窑滞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,536評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恢筝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哀卫。...
    茶點(diǎn)故事閱讀 38,683評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖撬槽,靈堂內(nèi)的尸體忽然破棺而出此改,到底是詐尸還是另有隱情,我是刑警寧澤侄柔,帶...
    沈念sama閱讀 34,342評(píng)論 4 330
  • 正文 年R本政府宣布共啃,位于F島的核電站占调,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏移剪。R本人自食惡果不足惜究珊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,964評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望纵苛。 院中可真熱鬧剿涮,春花似錦、人聲如沸攻人。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,772評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽怀吻。三九已至瞬浓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蓬坡,已是汗流浹背瑟蜈。 一陣腳步聲響...
    開封第一講書人閱讀 32,004評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渣窜,地道東北人铺根。 一個(gè)月前我還...
    沈念sama閱讀 46,401評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像乔宿,于是被迫代替她去往敵國和親位迂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,566評(píng)論 2 349

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