您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關什么是Hystrix,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
Hystrix協調分布式系統中各個服務高可用的框架,SpringCloud體系重要的一員。Hystrix主要解決了服務雪崩問題、服務監控問題等。
主要在于預防依賴服務崩潰影響到自己服務資源被耗光,使用隔離的方式限制調用依賴服務所能使用的最大線程資源。如果一個服務崩潰,不控制好資源隔離的話,會引發服務雪崩,眾多上游服務集體崩潰。
另外在并發量很大的情況下,也可以降低對依賴服務請求的流量,避免依賴服務過度負載。
Hystrix將對外部服務的調用和一系列處理封裝為一個Commond對象,具體分為HystrixCommand(直接調用命令),HystrixObservableCommand(觀察者訂閱命令),后者可以注冊回調事件。兩者都可以以異步或同步的方式調用(異步返回Future,后續可以調用get阻塞獲取結果)。
Commond對象對資源隔離進行隔離有兩種方式,一種是使用線程池(常用),第二種是使用信號量。兩者都是對Commond被調用的線程并發數量進行限制,區別在于信號量只是對command被調用并發許可的一個線程,不能記錄超時信息等等。
選擇Commond資源隔離的策略,線程池(常用)或信號量
指定command名稱、組。名稱默認為類名(一個command通常對應一個依賴服務的接口調用),group下的所有command默認情況下共用一個線程池或用一個信號量隔離(group一般對應一個依賴服務)。
指定command線程池,HystrixThreadPool的key默認為組名稱,也可以手動指定使用的HystrixThreadPool。
指定線程池核心線程數大小,默認為10。
指定線程池隊列長度,默認-1 無界隊列,設置值之后超過則拒絕請求。
指定線程池拒絕閥值,默認5,超過就拒絕請求。
信號量隔離下可設置最大并發訪問量,默認10。
在一個web調用主線程中,為該主線程調用服務的command建立緩存,使得調用依賴服務相同參數的情況下直接從內存中獲取結果,由于本人認為其作用不是很大,所以就不多介紹了,主要是在攔截器中初始化HytrixRequestContext(這個緩存數據目測應該是在線程本地變量里面),然后Command中實現getCacheKey方法返回cache的key,當key一樣時,直接嘗試獲取之前調用后返回相同key的結果。
通過Command實現getFallBack方法(HystrixCommand)或resumeWithFallback方法(HystrixObservableCommand),實現降級邏輯,本地返回降級之后的結果。
線程池或信號量拒絕
調用超時
執行報錯
斷路器被開啟
取本地緩存中較老的數據
返回默認值
調用超時達到一定比例
執行報錯達到一定比例
線程池或信號量拒絕達到一定比例
一定時間之后會切換到半開狀態,讓1個請求通過,看是否能夠正常返回
如果半開狀態允許通過的請求成功了,就關閉斷路器
是否打開斷路器(默認打開)
斷路器時間滾動窗中最小的請求數(默認20)
多少異常(包括超時、報錯、拒絕)比例(默認50%)打開斷路器
多長時間進入半開狀態(默認5000毫秒)
是否強制打開斷路器
是否強制關閉斷路器
超時時長配置(默認1000毫秒)
是否打開超時機制(默認打開)
關于什么是Hystrix就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。