Hystrix熔斷機制原理剖析

一、前言

在分布式系統(tǒng)架構(gòu)中多個系統(tǒng)之間通常是通過遠程RPC調(diào)用進行通信饺鹃,也就是 A 系統(tǒng)調(diào)用 B 系統(tǒng)服務莫秆,B 系統(tǒng)調(diào)用 C 系統(tǒng)的服務。當尾部應用 C 發(fā)生故障而系統(tǒng) B 沒有服務降級時候可能會導致 B悔详,甚至系統(tǒng) A 癱瘓镊屎,這種現(xiàn)象被稱為雪崩現(xiàn)象。所以在系統(tǒng)設(shè)計時候要使用一定的降級策略茄螃,來保證當服務提供方服務不可用時候缝驳,服務調(diào)用方可以切換到降級后的策略進行執(zhí)行。

二、Hystrix 中基于自反饋調(diào)節(jié)熔斷狀態(tài)的算法原理

我們可以把熔斷器想象為一個保險絲用狱,在電路系統(tǒng)中萎庭,一般在所有的家電系統(tǒng)連接外部供電的線路中間都會加一個保險絲,當外部電壓過高齿拂,達到保險絲的熔點時候驳规,保險絲就會被熔斷,從而可以切斷家電系統(tǒng)與外部電路的聯(lián)通署海,進而保障家電系統(tǒng)不會因為電壓過高而損壞吗购。

Hystrix提供的熔斷器就有類似功能,當在一定時間段內(nèi)服務調(diào)用方調(diào)用服務提供方的服務的次數(shù)達到設(shè)定的閾值砸狞,并且出錯的次數(shù)也達到設(shè)置的出錯閾值捻勉,就會進行服務降級,讓服務調(diào)用方之間執(zhí)行本地設(shè)置的降級策略刀森,而不再發(fā)起遠程調(diào)用踱启。但是Hystrix提供的熔斷器具有自我反饋,自我恢復的功能研底,Hystrix會根據(jù)調(diào)用接口的情況埠偿,讓熔斷器在closed,open,half-open三種狀態(tài)之間自動切換。

open狀態(tài)說明打開熔斷榜晦,也就是服務調(diào)用方執(zhí)行本地降級策略冠蒋,不進行遠程調(diào)用。
closed狀態(tài)說明關(guān)閉了熔斷乾胶,這時候服務調(diào)用方直接發(fā)起遠程調(diào)用抖剿。
half-open狀態(tài),則是一個中間狀態(tài)识窿,當熔斷器處于這種狀態(tài)時候斩郎,直接發(fā)起遠程調(diào)用。

三種狀態(tài)的轉(zhuǎn)換:

  • closed->open:正常情況下熔斷器為closed狀態(tài)喻频,當訪問同一個接口次數(shù)超過設(shè)定閾值并且錯誤比例超過設(shè)置錯誤閾值時候缩宜,就會打開熔斷機制,這時候熔斷器狀態(tài)從closed->open半抱。

  • open->half-open:當服務接口對應的熔斷器狀態(tài)為open狀態(tài)時候脓恕,所有服務調(diào)用方調(diào)用該服務方法時候都是執(zhí)行本地降級方法,那么什么時候才會恢復到遠程調(diào)用那窿侈?Hystrix提供了一種測試策略炼幔,也就是設(shè)置了一個時間窗口,從熔斷器狀態(tài)變?yōu)閛pen狀態(tài)開始的一個時間窗口內(nèi)史简,調(diào)用該服務接口時候都委托服務降級方法進行執(zhí)行乃秀。如果時間超過了時間窗口肛著,則把熔斷狀態(tài)從open->half-open,這時候服務調(diào)用方調(diào)用服務接口時候,就可以發(fā)起遠程調(diào)用而不再使用本地降級接口跺讯,如果發(fā)起遠程調(diào)用還是失敗枢贿,則重新設(shè)置熔斷器狀態(tài)為open狀態(tài),從新記錄時間窗口開始時間刀脏。

  • half-open->closed: 當熔斷器狀態(tài)為half-open,這時候服務調(diào)用方調(diào)用服務接口時候局荚,就可以發(fā)起遠程調(diào)用而不再使用本地降級接口,如果發(fā)起遠程調(diào)用成功愈污,則重新設(shè)置熔斷器狀態(tài)為closed狀態(tài)耀态。

那么有一個問題,用來判斷熔斷器從closed->open轉(zhuǎn)換的數(shù)據(jù)是哪里來的那暂雹?其實這個是HystrixCommandMetrics對象來做的首装,該對象用來存在HystrixCommand的一些指標數(shù)據(jù),比如接口調(diào)用次數(shù)杭跪,調(diào)用接口失敗的次數(shù)等等仙逻,后面我們會講解。

三涧尿、總結(jié)

系統(tǒng)設(shè)計時候要使用一定的降級策略系奉,來保證當服務提供方服務不可用時候,服務調(diào)用方可以切換到降級后的策略進行執(zhí)行现斋,Hystrix作為熔斷器組件使用范圍還是很廣泛的.
更多關(guān)于分布式系統(tǒng)中服務降級策略的知識可以單擊 單擊我
想系統(tǒng)學dubbo的單擊我
想學并發(fā)的童鞋可以 單擊我

image.png

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末喜最,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子庄蹋,更是在濱河造成了極大的恐慌,老刑警劉巖迷雪,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件限书,死亡現(xiàn)場離奇詭異,居然都是意外死亡章咧,警方通過查閱死者的電腦和手機倦西,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赁严,“玉大人扰柠,你說我怎么就攤上這事√墼迹” “怎么了卤档?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長程剥。 經(jīng)常有香客問我劝枣,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任舔腾,我火速辦了婚禮溪胶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘稳诚。我一直安慰自己哗脖,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布扳还。 她就那樣靜靜地躺著才避,像睡著了一般。 火紅的嫁衣襯著肌膚如雪普办。 梳的紋絲不亂的頭發(fā)上工扎,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音衔蹲,去河邊找鬼肢娘。 笑死,一個胖子當著我的面吹牛舆驶,可吹牛的內(nèi)容都是我干的橱健。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼沙廉,長吁一口氣:“原來是場噩夢啊……” “哼拘荡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起撬陵,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤珊皿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巨税,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟋定,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年草添,在試婚紗的時候發(fā)現(xiàn)自己被綠了驶兜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡远寸,死狀恐怖抄淑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情驰后,我是刑警寧澤肆资,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站倡怎,受9級特大地震影響迅耘,放射性物質(zhì)發(fā)生泄漏贱枣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一颤专、第九天 我趴在偏房一處隱蔽的房頂上張望纽哥。 院中可真熱鬧,春花似錦栖秕、人聲如沸春塌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽只壳。三九已至,卻和暖如春暑塑,著一層夾襖步出監(jiān)牢的瞬間吼句,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工事格, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惕艳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓驹愚,卻偏偏與公主長得像远搪,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子逢捺,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

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