文章目錄
Hystrix簡介&說明
Hystrix 介紹
- Hystrix 是用於處理延遲和容錯的開源庫
- Hystrix 主要用於避免級聯故障,提高系統彈性
- Hystrix 解決了由於扇出導致的“雪崩效應”
- Hystrix 的核心是“隔離”和“熔斷機制”
扇出示意圖:
Hystrix 主要作用
- 服務隔離和服務熔斷
- 服務降級、限流和快速失敗
- 請求合併和請求緩存
- 自帶單體和集羣監控
Hystrix 流程
-
1、構建一個
HystrixCommand
或者HystrixObservableCommand
對象 -
2、執行命令
有4種方式可以執行一個Hystrix命令。
execute()
—該方法是阻塞的,從依賴請求中接收到單個響應(或者出錯時拋出異常)。queue()
—從依賴請求中返回一個包含單個響應的Future對象。observe()
—訂閱一個從依賴請求中返回的代表響應的Observable對象。toObservable()
—返回一個Observable對象,只有當你訂閱它時,它纔會執行Hystrix命令併發射響應。
-
3、響應是否被緩存
-
4、迴路器是否打開
-
5、線程池、隊列、信號量是否已滿
-
6、
HystrixObservableCommand.construct()
或者HystrixCommand.run()
-
7、計算迴路指標[Circuit Health](業務執行成功、失敗、拒絕和超時)
-
8、獲取FallBack
Hystrix 兩種命令模式
HystrixCommand
或者HystrixObservableCommand
Command
會以隔離的形式完成run()
方法的調用ObservableCommand
使用當前線程進行調用
Hystrix 配置
GroupKey
- Hystrix 中 GroupKey 是唯一必填項
- GroupKey 可以作爲分組監控和報警的作用
- GroupKey 將作爲線程池的默認名稱
CommandKey
- Hystrix 可以不填寫 CommandKey
- 默認 Hystrix 會通過反射類名命名 CommandKey
- 在 Setting 中加入 andCommandKey 進行命名
Hystrix 請求特性
請求緩存
- Hystrix 支持將請求結果進行本地緩存
- 通過實現 getCacheKey 方法來判斷是否取出緩存
- 請求緩存要求請求必須在同一個上下文
- 可以通過 RequestCacheEnabled 開啓請求緩存(默認開啓)
請求合併
- Hystrix 支持將多個請求合併成一次其你去
- Hystrix 請求合併要求兩次請求必須足夠 “近”
- 請求合併分爲局部合併和全局合併兩種
- Collapser 可以設置相關參數
Hystrix 隔離
Hystrix 隔離簡介
- Hystrix 提供了信號量和線程兩種隔離手段
- 線程隔離會在單獨的線程中執行業務邏輯
- 信號量隔離在調用線程上執行
- 官方推薦優先線程隔離
線程隔離
- 應用自身完全受保護,不會受其他依賴影響
- 有效降低接入新服務的風險
- 依賴服務出現問題,應用自身可以快速反應問題
- 可以通過實時刷新動態屬性減少依賴問題影響
信號量隔離
- 信號量隔離是輕量級的隔離術
- 無網絡開銷的情況推薦使用信號量隔離
- 信號量是通過計數器和請求線程比對進行限流
ThreadPoolKey
- Hystrix 可以不填寫 ThreadPoolKey
- 默認Hystrix會使用GroupKey 命名線程池
- 在Setting中加入andThreadOPoolKey 進行命名
Hystrix 降級處理機制
降級介紹
- 降級是一種無奈的“選擇”,俗稱“備胎” (^)
- Command 降級需要實現fallback方法
- ObservableCommand 降級實現 resumeWithFallback方法
降級觸發原則
- HystrixBadRequestException 以外的異常
- 運行超時或熔斷器處於開啓狀態
- 線程池或信號量已滿
快速失敗
- Hystrix 提供了快速失敗的機制
- 當不實現fallback 方法時會將異常拋出
Hystrix 熔斷機制
熔斷器介紹
- 熔斷器是一種開關,用來控制流量是否執行業務邏輯
- 熔斷器核心指標
- 快照時間窗
- 請求總數閾值
- 錯誤百分比閾值
熔斷器狀態
- 熔斷器開啓: 所有請求都會進入fallback方法
- 熔斷器半開啓: 間歇性讓請求觸發run方法
- 熔斷器關閉: 正常處理業務請求
- 默認情況下熔斷器開啓5秒後進入半開啓狀態
– end
–
如有問題,請留言或者發送郵件,感謝您的閱讀
歡迎關注博主公衆號
: