天天看點

springcloud應用之hystrix

springcloud應用之hystrix

閱讀提示

hystrix是什麼

為什麼需要hystrix

如何使用hystrix

降級

逾時

熔斷

限流

hystrix整合feign

擷取order微服務的異常

hystrix項目

請先閱讀feign

Hystrix是一個用于處理分布式系統的延遲和容錯的開源庫,在分布式系統裡,許多依賴不可避免的會調用失敗,比

如逾時、異常等,Hystrix能夠保證在一個依賴出問題的情況下,不會導緻整體服務失敗,避免級聯故障,以提高分

布式系統的彈性。

“斷路器”本身是一種開關裝置,當某個服務單元發生故障之後,通過斷路器的故障監控(類似熔斷保險絲),向調

用方傳回一個符合預期的、可處理的備選響應(FallBack),而不是長時間的等待或者抛出調用方無法處理的異

常,這樣就保證了服務調用方的線程不會被長時間、不必要地占用,進而避免了故障在分布式系統中的蔓延,乃至

雪崩。

微服務之間的互相調用,調用鍊可能很長,萬一中間有一個微服務挂掉了,大量請求就會累計在挂掉的微服務,導緻其他微服務沒有可用資源,基于這種服務雪崩,需要有人站出來,解決這種中途有人挂掉的情況,例如可以用降級方法處理,中途微服務的方法卡住了,出異常了,就跑降級方法傳回一個服務繁忙稍後重試,這就是hystrix幹的事,它保證了服務的高可用

對于上面服務雪崩情況hystrix提供了四種解決辦法服務降級,逾時,限流,熔斷

啟動類加@EnableHystrix,pom加

通路testOvertime接口設定time=2000,會自動跑降級方法,因為hystrix有預設逾時時間1s,這個時間這樣配置

其實熔斷,就好像我們生活中的跳閘一樣, 比如說你的電路出故障了,為了防止出現

大型事故 這裡直接切斷了你的電源以免意外繼續發生, 把這個概念放在我們程式上也是如此, 當一個微服務調用多

次出現問題時(預設是10秒内20次當然 這個也能配置),hystrix就會采取熔斷機制,不再繼續調用你的方法(會

在預設5秒鐘内和電器短路一樣,5秒鐘後會試探性的先關閉熔斷機制,但是如果這時候再失敗一次{之前是20次}

那麼又會重新進行熔斷) 而是直接調用降級方法,這樣就一定程度上避免了服務雪崩的問題.

簡單來說熔斷會保證如果短時間出現大量錯誤,直接走降級,5s恢複不再直接走降級,而是走你的方法邏輯,如果此時再失敗,又會觸發5s時間直接走降級,如此往複。

測試的話可以這樣測testDemote這個接口大概設定錯誤率rate=0.5,不停f5有機會10s出錯20次,然後會發現5s内的f5都是直接降級資訊

我方法休眠3s,coreSize=2這兩個資訊組合起來的意思是

如果在3s内有超過兩個請求,超出的部分會直接降級,這個測試得多開幾個浏覽器視窗

如果覺得上面這種方式太複雜,可以試試下面的方法

yml

FeignAndHystrix

這裡千萬注意要把OrderService的@FeignClient(name = “order”)注釋掉,并且把controller用到orderService的地方全注釋,因為一組微服務隻能被@FeignClient一次

調用方式

繼續閱讀