java版spring cloud熔斷器Hystrix

1. 熔斷器

服務(wù)雪崩

在正常的微服務(wù)架構(gòu)體系下袱结,一個業(yè)務(wù)很少有只需要調(diào)用一個服務(wù)就可以返回數(shù)據(jù)的情況作瞄,這種比較常見的是出現(xiàn)在demo中,一般都是存在調(diào)用鏈的桐愉,比如A->B->C->D财破,如果D在某一個瞬間出現(xiàn)問題,比如網(wǎng)絡(luò)波動从诲,io偏高左痢,導(dǎo)致卡頓,隨著時間的流逝系洛,后續(xù)的流量繼續(xù)請求俊性,會造成D的壓力上升,有可能引起宕機描扯。

你以為這就是結(jié)束么定页,圖樣圖森破,這才是噩夢的開始绽诚,在同一個調(diào)用鏈上的ABC三個服務(wù)都會隨著D的宕機而引發(fā)宕機典徊,這還不是結(jié)束,一個服務(wù)不可能只有一個接口恩够,當(dāng)它開始卡頓宕機時卒落,會影響到其他調(diào)用鏈的正常調(diào)用,最終導(dǎo)致所有的服務(wù)癱瘓蜂桶。

如下圖所示:

熔斷器

相信大家都知道家用電閘导绷,原來老式的電閘是使用保險絲的(現(xiàn)在很多都是空氣開關(guān)了),當(dāng)家里用電量過大的時候屎飘,保險絲經(jīng)常燒斷妥曲,這么做是保護家里的用電器贾费,防止過載。

熔斷器的作用和這個很像檐盟,它可以實現(xiàn)快速失敗褂萧,如果在一段時間內(nèi)服務(wù)調(diào)用失敗或者異常,會強制要求當(dāng)前調(diào)用失敗葵萎,不在走遠程調(diào)用导犹,走服務(wù)降級操作(返回固定數(shù)據(jù)或者其他一些降級操作)。從而防止應(yīng)用程序不斷地嘗試執(zhí)行可能會失敗的操作羡忘,使得應(yīng)用程序繼續(xù)執(zhí)行而不用等待修正錯誤谎痢,或者浪費CPU時間去等到長時間的超時產(chǎn)生。熔斷器也可以自動診斷錯誤是否已經(jīng)修正卷雕,如果已經(jīng)修正节猿,應(yīng)用程序會再次嘗試調(diào)用操作。

熔斷器模式就像是那些容易導(dǎo)致錯誤的操作的一種代理漫雕。這種代理能夠記錄最近調(diào)用發(fā)生錯誤的次數(shù)滨嘱,然后決定使用允許操作繼續(xù),或者立即返回錯誤浸间。 Hystrix會有一個熔斷時間窗口太雨,具體轉(zhuǎn)換邏輯如下:

熔斷器就是保護服務(wù)高可用的最后一道防線。

2. Hystrix

1. 斷路器機制

斷路器很好理解, 當(dāng)Hystrix Command請求后端服務(wù)失敗數(shù)量超過一定比例(默認50%), 斷路器會切換到開路狀態(tài)(Open)魁蒜。這時所有請求會直接失敗而不會發(fā)送到后端服務(wù)囊扳。斷路器保持在開路狀態(tài)一段時間后(默認5秒), 自動切換到半開路狀態(tài)(HALF-OPEN)。這時會判斷下一次請求的返回情況, 如果請求成功, 斷路器切回閉路狀態(tài)(CLOSED), 否則重新切換到開路狀態(tài)(OPEN)兜看。Hystrix的斷路器就像我們家庭電路中的保險絲, 一旦后端服務(wù)不可用, 斷路器會直接切斷請求鏈, 避免發(fā)送大量無效請求影響系統(tǒng)吞吐量, 并且斷路器有自我檢測并恢復(fù)的能力宪拥。

2. Fallback

Fallback相當(dāng)于是降級操作。對于查詢操作, 我們可以實現(xiàn)一個fallback方法, 當(dāng)請求后端服務(wù)出現(xiàn)異常的時候, 可以使用fallback方法返回的值铣减。fallback方法的返回值一般是設(shè)置的默認值或者來自緩存她君。

3. 資源隔離

在Hystrix中, 主要通過線程池來實現(xiàn)資源隔離。通常在使用的時候我們會根據(jù)調(diào)用的遠程服務(wù)劃分出多個線程池葫哗。例如調(diào)用產(chǎn)品服務(wù)的Command放入A線程池, 調(diào)用賬戶服務(wù)的Command放入B線程池缔刹。這樣做的主要優(yōu)點是運行環(huán)境被隔離開了。這樣就算調(diào)用服務(wù)的代碼存在bug或者由于其他原因?qū)е伦约核诰€程池被耗盡時, 不會對系統(tǒng)的其他服務(wù)造成影響劣针。但是帶來的代價就是維護多個線程池會對系統(tǒng)帶來額外的性能開銷校镐。如果是對性能有嚴格要求而且確信自己調(diào)用服務(wù)的客戶端代碼不會出問題的話, 可以使用Hystrix的信號模式(Semaphores)來隔離資源。

3. Feign Hystrix

上一篇我們使用了producer和consumers捺典,熔斷器是只作用在服務(wù)調(diào)用端鸟廓,因此上一篇使用到的consumers我們可以直接拿來使用。因為,F(xiàn)eign中已經(jīng)依賴了Hystrix所以在maven配置上不用做任何改動引谜。

1. 配置文件application.yml新增

server:? port:8081spring:? application:? ? name:spring-cloud-consumerseureka:? client:? ? service-url:? ? ? defaultZone:http://localhost:8761/eureka/feign:? hystrix:? ? enabled:true

其中新增了feign.hystrix.enabled = true

2. 創(chuàng)建fallback類牍陌,繼承與HelloRemote實現(xiàn)回調(diào)的方法

packagecom.springcloud.consumers.fallback;importcom.springcloud.consumers.remote.HelloRemote;importorg.springframework.stereotype.Component;importorg.springframework.web.bind.annotation.RequestParam;/** * Created with IntelliJ IDEA. * *@User: weishiyao *@Date: 2019/7/2 *@Time: 23:14 *@email: inwsy@hotmail.com * Description: */@ComponentpublicclassHelloRemoteFallBackimplementsHelloRemote{@OverridepublicStringhello(@RequestParam(value ="name")String name){return"hello "+ name +", i am fallback massage";? ? }}

3. 添加fallback屬性

在HelloRemote類添加指定fallback類,在服務(wù)熔斷的時候返回fallback類中的內(nèi)容员咽。

packagecom.springcloud.consumers.remote;importcom.springcloud.consumers.fallback.HelloRemoteFallBack;importorg.springframework.cloud.openfeign.FeignClient;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestParam;/** *@Author: shiyao.wei *@Date: 2019/7/2 11:14 *@Version: 1.0 *@Desc: */@FeignClient(name="SPRING-CLOUD-PRODUCER", fallback = HelloRemoteFallBack.class)publicinterfaceHelloRemote{@RequestMapping(value ="/hello")Stringhello(@RequestParam(value ="name")String name);}

所有改動結(jié)束毒涧。

4. 測試

現(xiàn)在我們測試看下結(jié)果,老規(guī)矩贝室,順次啟動注冊中心Eureka契讲、provider、consumer

訪問上一節(jié)我們訪問過的鏈接:http://localhost:8081/hello/spring

現(xiàn)在可以看到頁面正常顯示:hello spring滑频,producer is ready

現(xiàn)在我們手動把provider停掉捡偏,再訪問一下鏈接看一下:

現(xiàn)在頁面已經(jīng)顯示我們?nèi)蹟嗪蟮男畔⒘耍篽ello spring, i am fallback massage

現(xiàn)在說明我們的測試已經(jīng)成功了。(企業(yè)架構(gòu)源碼可以加求球:三五三六二四七二五九)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末峡迷,一起剝皮案震驚了整個濱河市银伟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凉当,老刑警劉巖枣申,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件售葡,死亡現(xiàn)場離奇詭異看杭,居然都是意外死亡,警方通過查閱死者的電腦和手機挟伙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進店門楼雹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人尖阔,你說我怎么就攤上這事贮缅。” “怎么了介却?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵谴供,是天一觀的道長。 經(jīng)常有香客問我齿坷,道長桂肌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任永淌,我火速辦了婚禮崎场,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘遂蛀。我一直安慰自己谭跨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著螃宙,像睡著了一般蛮瞄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上污呼,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天裕坊,我揣著相機與錄音,去河邊找鬼燕酷。 笑死籍凝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的苗缩。 我是一名探鬼主播饵蒂,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼酱讶!你這毒婦竟也來了退盯?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泻肯,失蹤者是張志新(化名)和其女友劉穎渊迁,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灶挟,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡琉朽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稚铣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箱叁。...
    茶點故事閱讀 40,133評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖惕医,靈堂內(nèi)的尸體忽然破棺而出耕漱,到底是詐尸還是另有隱情,我是刑警寧澤抬伺,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布螟够,位于F島的核電站,受9級特大地震影響峡钓,放射性物質(zhì)發(fā)生泄漏妓笙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一椒楣、第九天 我趴在偏房一處隱蔽的房頂上張望给郊。 院中可真熱鬧,春花似錦捧灰、人聲如沸淆九。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炭庙。三九已至饲窿,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焕蹄,已是汗流浹背逾雄。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留腻脏,地道東北人鸦泳。 一個月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像永品,于是被迫代替她去往敵國和親做鹰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,077評論 2 355

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

  • 1. 熔斷器 服務(wù)雪崩 在正常的微服務(wù)架構(gòu)體系下鼎姐,一個業(yè)務(wù)很少有只需要調(diào)用一個服務(wù)就可以返回數(shù)據(jù)的情況钾麸,這種比較常...
    fumi106閱讀 196評論 0 0
  • 在微服務(wù)架構(gòu)中,根據(jù)業(yè)務(wù)來拆分成一個個的服務(wù)炕桨,服務(wù)與服務(wù)之間可以相互調(diào)用(RPC)饭尝,在Spring Cloud可以...
    Java大寶寶閱讀 410評論 0 0
  • 推薦指數(shù): 6.0 書籍主旨關(guān)鍵詞:特權(quán)、焦點献宫、注意力钥平、語言聯(lián)想、情景聯(lián)想 觀點: 1.統(tǒng)計學(xué)現(xiàn)在叫數(shù)據(jù)分析遵蚜,社會...
    Jenaral閱讀 5,721評論 0 5
  • 昨天帖池,在回家的路上奈惑,坐在車里悠哉悠哉地看著三毛的《撒哈拉沙漠的故事》吭净,我被里面的內(nèi)容深深吸引住了,盡管上學(xué)時...
    夜闌曉語閱讀 3,788評論 2 9
  • 一月四號的大沙有個想法。從昨晚到現(xiàn)在就一直圍繞在腦子里原在∮讶牛或許深受那些小說的影響,或許真的就是我自己腦子或者精神么有...
    一個人的大沙閱讀 4,032評論 3 4