Spring Cloud Hystrix——熔斷器


1、雪崩效應
在微服務架構中通常會有多個服務層調用,基礎服務的故障可能會導致級聯故障,進而造成整個系統不可用的情況,這種現象被稱為服務雪崩效應。服務雪崩效應是一種因“服務提供者”的不可用導致“服務消費者”的不可用,並將不可用逐漸放大的過程。

如下圖所示:A作為服務提供者,B為A的服務消費者,C和D是B的服務消費者。A不可用引起了B的不可用,並將不可用像滾雪球一樣放大到C和D時,雪崩效應就形成了。

2、服務雪崩原因分析
2.1、服務提供者不可用
2.2、重試加大流量
2.3、服務調用者不可用


3、使用Hystrix預防服務雪崩
Hystrix [hɪst'rɪks]的中文含義是豪豬,因其背上長滿了刺而擁有自我保護能力。Netflix的 Hystrix 是一個幫助解決分布式系統交互時超時處理和容錯的類庫,它同樣擁有保護系統的能力。

Hystrix的設計原則包括:
資源隔離
熔斷器(斷路器)
命令模式

4、Hystrix特性
4.1、熔斷器機制
斷路器很好理解,當Hystrix Command請求后端服務失敗數量超過一定比例(默認50%),斷路器會切換到開路狀態(Open)。這時所有請求會直接失敗而不會發送到后端服務。 斷路器保持在開路狀態一段時間后(默認5秒),自動切換到半開路狀態(HALF-OPEN)。這時會判斷下一次請求的返回情況, 如果請求成功,斷路器切回閉路狀態(CLOSED), 否則重新切換到開路狀態(OPEN)。 Hystrix的斷路器就像我們家庭電路中的保險絲,一旦后端服務不可用,斷路器會直接切斷請求鏈,避免發送大量無效請求影響系統吞吐量, 並且斷路器有自我檢測並恢復的能力。

熔斷器開關相互轉換的邏輯圖:

4.2、Fallback
Fallback相當於是降級操作。對於查詢操作,我們可以實現一個fallback方法,當請求后端服務出現異常的時候,可以使用fallback方法返回的值。 fallback方法的返回值一般是設置的默認值或者來自緩存。

4.3、資源隔離
在Hystrix中,主要通過線程池來實現資源隔離。通常在使用的時候我們會根據調用的遠程服務划分出多個線程池。例如調用產品服務的Command放入A線程池, 調用賬戶服務的Command放入B線程池。這樣做的主要優點是運行環境被隔離開了。這樣就算調用服務的代碼存在bug或者由於其他原因導致自己所在線程池被耗盡時, 不會對系統的其他服務造成影響。但是帶來的代價就是維護多個線程池會對系統帶來額外的性能開銷。如果是對性能有嚴格要求而且確信自己調用服務的客戶端代碼不會出問題的話, 可以使用Hystrix的信號模式(Semaphores)來隔離資源。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM