SpringCloud入門實(shí)戰(zhàn)-Hystrix概述

?? 《SpringCloud入門實(shí)戰(zhàn)系列》解鎖SpringCloud主流組件入門應(yīng)用及關(guān)鍵特性荚藻。帶你了解SpringCloud主流組件,是如何一戰(zhàn)解決微服務(wù)諸多難題的。項(xiàng)目demo:源碼地址

一啥刻、Hystrix是什么

老規(guī)矩秃殉,官網(wǎng):Hystrix官網(wǎng)坝初。Hystrix關(guān)鍵特性:服務(wù)降級(jí)、服務(wù)熔斷钾军、服務(wù)限流鳄袍。
Hystrix是一個(gè)用于處理分布式系統(tǒng)的延遲容錯(cuò)的開源庫,在分布式系統(tǒng)用吏恭,許多依賴不可避免的會(huì)調(diào)用失敗拗小,比如超時(shí)、異常等樱哼。Hystrix能夠保證在一個(gè)依賴出問題的情況下哀九,不會(huì)導(dǎo)致整體服務(wù)失敗剿配,避免級(jí)聯(lián)故障,以提高分布式系統(tǒng)的彈性阅束。
"斷路器”本身是一種開關(guān)裝置呼胚,當(dāng)某個(gè)服務(wù)單元發(fā)生故障之后,通過斷路器的故障監(jiān)控息裸,向調(diào)用方返回一個(gè)符合預(yù)期的蝇更、可處理的相應(yīng)(FallBack),而不是長時(shí)間的等待或者拋出調(diào)用方無法處理的異常呼盆,這樣就保證了服務(wù)調(diào)用方的線程不會(huì)被長時(shí)間年扩、不必更地占用,從而避免了故障在分布式系統(tǒng)中的蔓延访圃,乃至雪崩常遂。

怎么樣,是不是關(guān)于Hystrix是什么挽荠,怎么學(xué)官網(wǎng)是不是清楚明了克胳。

另外我們關(guān)注到Hystrix也停更了,我們知道任何技術(shù)停更圈匆,也相應(yīng)的有其他不停更技術(shù)的相似替代漠另,Sentinel也要安排學(xué)起來了!


Tip:不管學(xué)習(xí)哪個(gè)技術(shù)跃赚,個(gè)人還是建議要學(xué)會(huì)看官網(wǎng)笆搓,那是最準(zhǔn)確清楚的。

二纬傲、Hystrix的用途

為通過第三方客戶端庫訪問(通常通過網(wǎng)絡(luò))的依賴關(guān)系提供保護(hù)和控制延遲和故障满败。

停止復(fù)雜分布式系統(tǒng)中的級(jí)聯(lián)故障。

故障快速恢復(fù)叹括。

盡可能后退并優(yōu)雅地降級(jí)算墨。

實(shí)現(xiàn)近乎實(shí)時(shí)的監(jiān)控、警報(bào)和操作控制汁雷。

三净嘀、Hystrix的設(shè)計(jì)原則

防止任何單個(gè)依賴項(xiàng)用完所有容器(如Tomcat)用戶線程。

減少負(fù)載并快速故障侠讯,而不是排隊(duì)挖藏。

在可行的情況下提供回退,以保護(hù)用戶免受故障的影響厢漩。

使用隔離技術(shù)(如斷路器模式)來限制任何一種依賴關(guān)系的影響膜眠。

通過近乎實(shí)時(shí)的指標(biāo)、監(jiān)控和警報(bào)優(yōu)化發(fā)現(xiàn)時(shí)間

通過低延遲傳播配置更改和支持Hystrix大多數(shù)方面的動(dòng)態(tài)屬性更改來優(yōu)化恢復(fù)時(shí)間,使您能夠通過低延遲反饋回路進(jìn)行實(shí)時(shí)操作修改宵膨。

防止在整個(gè)依賴客戶端執(zhí)行過程中發(fā)生故障架谎,而不僅僅是在網(wǎng)絡(luò)流量中。

四柄驻、Hystrix重要概念

五狐树、Hystrix實(shí)戰(zhàn)案例

1焙压、準(zhǔn)備項(xiàng)目

新建springcloud-hystrix工程鸿脓,以單機(jī)版注冊(cè)中心為例,陸續(xù)建module搭建環(huán)境涯曲。
環(huán)境搭建參考《SpringCloud入門實(shí)戰(zhàn)系列》前幾篇文章野哭。

2、服務(wù)降級(jí)

服務(wù)降級(jí):也就是假設(shè)對(duì)方系統(tǒng)不可用了幻件,向調(diào)用方返回一個(gè)符合預(yù)期的拨黔,可備選的響應(yīng)。比如我們常見的“服務(wù)器忙绰沥,請(qǐng)稍后重試!”篱蝇、“系統(tǒng)開小差,請(qǐng)稍后再試徽曲!”零截、“您的內(nèi)容飛到了外太空…”等,超時(shí)不再等待秃臣,出錯(cuò)有兜底方案涧衙。不用客戶等待并立刻返回一個(gè)友好的提示,這就是服務(wù)降級(jí)奥此。

更多內(nèi)容參看:SpringCloud入門實(shí)戰(zhàn)-Hystrix服務(wù)降級(jí)

3弧哎、服務(wù)熔斷

熔斷機(jī)制是應(yīng)對(duì)雪崩效應(yīng)的一種微服務(wù)鏈路保護(hù)機(jī)制。當(dāng)扇出鏈路的某個(gè)微服務(wù)出錯(cuò)不可用或者響應(yīng)時(shí)間太長時(shí)會(huì)進(jìn)行服務(wù)的降級(jí)稚虎,進(jìn)而熔斷該節(jié)點(diǎn)微服務(wù)的調(diào)用撤嫩,快速返回錯(cuò)誤的響應(yīng)信息。當(dāng)檢測(cè)到該節(jié)點(diǎn)微服務(wù)調(diào)用響應(yīng)正常后蠢终,恢復(fù)調(diào)用鏈路非洲。

更多內(nèi)容參看:SpringCloud入門實(shí)戰(zhàn)-Hystrix服務(wù)熔斷

4、服務(wù)限流

通過線程池或者信號(hào)量判斷是否已滿蜕径,超出容量的請(qǐng)求直接降級(jí)两踏,以達(dá)到限流的作用。

更多內(nèi)容參看:SpringCloud入門實(shí)戰(zhàn)-Hystrix服務(wù)限流

六兜喻、工作流程

1梦染、官網(wǎng)流程圖

翻譯過來就是:

2、流程說明

1)每次調(diào)用創(chuàng)建一個(gè)新的HystrixCommand,把依賴調(diào)用封裝在run()方法中.
2)執(zhí)行execute()/queue做同步或異步調(diào)用.
3)當(dāng)前調(diào)用是否已被緩存,是則直接返回結(jié)果帕识,否則進(jìn)入步驟 4
4)判斷熔斷器(circuit-breaker)是否打開,如果打開跳到步驟 8,進(jìn)行降級(jí)策略,如果關(guān)閉進(jìn)入步驟 5
5)判斷線程池/隊(duì)列/信號(hào)量是否跑滿泛粹,如果跑滿進(jìn)入降級(jí)步驟8,否則繼續(xù)后續(xù)步驟 6
6)調(diào)用HystrixCommand的run方法.運(yùn)行依賴邏輯
調(diào)用是否出現(xiàn)異常,否:繼續(xù)肮疗,是進(jìn)入步驟8晶姊,
調(diào)用是否超時(shí),否:返回調(diào)用結(jié)果伪货,是進(jìn)入步驟8

搜集5们衙、6步驟所有的運(yùn)行狀態(tài)(成功, 失敗, 拒絕,超時(shí))上報(bào)給熔斷器,用于統(tǒng)計(jì)從而判斷熔斷器狀態(tài)
getFallback()降級(jí)邏輯.四種觸發(fā)getFallback調(diào)用情況(圖中步驟8的箭頭來源):返回執(zhí)行成功結(jié)果

3碱呼、Hystrix源碼總結(jié)

  • 采用了AOP的方式來對(duì)方法進(jìn)行了增強(qiáng)
  • 采用了大量的RxJava響應(yīng)式編程蒙挑,利用了Future+線程池的方法進(jìn)行了大量的異步
  • 涉及到了滑動(dòng)窗口的設(shè)計(jì),來進(jìn)行統(tǒng)計(jì)失敗率(到Sentinel再仔細(xì)講述)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愚臀,一起剝皮案震驚了整個(gè)濱河市忆蚀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姑裂,老刑警劉巖馋袜,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舶斧,居然都是意外死亡欣鳖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門捧毛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來观堂,“玉大人,你說我怎么就攤上這事呀忧∈郏” “怎么了?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵而账,是天一觀的道長胰坟。 經(jīng)常有香客問我,道長泞辐,這世上最難降的妖魔是什么笔横? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮咐吼,結(jié)果婚禮上吹缔,老公的妹妹穿的比我還像新娘。我一直安慰自己锯茄,他們只是感情好厢塘,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布茶没。 她就那樣靜靜地躺著,像睡著了一般晚碾。 火紅的嫁衣襯著肌膚如雪抓半。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天格嘁,我揣著相機(jī)與錄音笛求,去河邊找鬼。 笑死糕簿,一個(gè)胖子當(dāng)著我的面吹牛探入,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冶伞,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼新症,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼步氏!你這毒婦竟也來了响禽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤荚醒,失蹤者是張志新(化名)和其女友劉穎芋类,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體界阁,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡侯繁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泡躯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贮竟。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖较剃,靈堂內(nèi)的尸體忽然破棺而出咕别,到底是詐尸還是另有隱情,我是刑警寧澤写穴,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布惰拱,位于F島的核電站,受9級(jí)特大地震影響啊送,放射性物質(zhì)發(fā)生泄漏偿短。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一馋没、第九天 我趴在偏房一處隱蔽的房頂上張望昔逗。 院中可真熱鬧,春花似錦篷朵、人聲如沸勾怒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽控硼。三九已至泽论,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間卡乾,已是汗流浹背翼悴。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幔妨,地道東北人鹦赎。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像误堡,于是被迫代替她去往敵國和親古话。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

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