1.簡介
Hystrix是由Netflix開源的一個延遲和容錯庫,用於隔離訪問遠程系統、服務或者第三方庫,防止級聯失敗,從而提升系統的可用性、容錯性與局部應用的彈性,是一個實現了超時機制和斷路器模式的工具類庫。
2.設計原則
- 防止任何單獨的依賴耗盡資源(線程)
過載立即切斷並快速失敗,防止排隊 - 儘可能提供回退以保護用戶免受故障
- 使用隔離技術(例如隔板,泳道和斷路器模式)來限制任何一個依賴的影響
- 通過近實時的指標,監控和告警,確保故障被及時發現
- 通過動態修改配置屬性,確保故障及時恢復
- 防止整個依賴客戶端執行失敗,而不僅僅是網絡通信
3.工作原理
- 使用命令模式將所有對外部服務(或依賴關係)的調用包裝在HystrixCommand或HystrixObservableCommand對象中,並將該對象放在單獨的線程中執行。
- 每個依賴都維護着一個線程池(或信號量),線程池被耗盡則拒絕請求(而不是讓請求排隊)。
- 記錄請求成功,失敗,超時和線程拒絕。
- 服務錯誤百分比超過了閾值,熔斷器開關自動打開,一段時間內停止對該服務的所有請求。
- 請求失敗,被拒絕,超時或熔斷時執行降級邏輯。
- 近實時地監控指標和配置的修改。
【工作原理圖】
【參考的命令模式】
當使用Hystrix封裝每個基礎依賴項時,每個依賴項彼此隔離,受到延遲時發生飽和的資源的限制,幷包含回退邏輯,該邏輯決定了在依賴項中發生任何類型的故障時做出什麼響應。
4.項目整合
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
5.注意事項
- 重要的是要記住,Hystrix命令和回退應放在同一類中,並具有相同的方法簽名(執行失敗異常的可選參數)。