spring cloud構建網際網路分散式微服務雲平臺- hystrix工作原理

使用者6866800318發表於2019-02-22

Hystrix是Netflix開源的一個限流熔斷的專案、主要有以下功能:

隔離(執行緒池隔離和訊號量隔離):限制呼叫分散式服務的資源使用,某一個呼叫的服務出現問題不會影響其他服務呼叫。 優雅的降級機制:超時降級、資源不足時(執行緒或訊號量)降級,降級後可以配合降級介面返回託底資料。

融斷:當失敗率達到閥值自動觸發降級(如因網路故障/超時造成的失敗率高),熔斷器觸發的快速失敗會進行快速恢復。

快取:提供了請求快取、請求合併實現。支援實時監控、報警、控制(修改配置)願意瞭解原始碼的朋友直接求求交流分享技術 一七九一七四三三八零

下面是他的工作流程:

3.jpg

Hystrix主要有4種呼叫方式:

toObservable() 方法 :未做訂閱,只是返回一個Observable 。

observe() 方法 :呼叫 #toObservable() 方法,並向 Observable 註冊 rx.subjects.ReplaySubject 發起訂閱。

queue() 方法 :呼叫 #toObservable() 方法的基礎上,呼叫:Observable#toBlocking() 和 BlockingObservable#toFuture()

返回 Future 物件

execute() 方法 :呼叫 #queue() 方法的基礎上,呼叫 Future#get() 方法,同步返回 #run() 的執行結果。

主要的執行邏輯:

1.每次呼叫建立一個新的HystrixCommand,把依賴呼叫封裝在run()方法中.

2.執行execute()/queue做同步或非同步呼叫.

3.判斷熔斷器(circuit-breaker)是否開啟,如果開啟跳到步驟8,進行降級策略,如果關閉進入步驟.

4.判斷執行緒池/佇列/訊號量是否跑滿,如果跑滿進入降級步驟8,否則繼續後續步驟.

5.呼叫HystrixCommand的run方法.執行依賴邏輯

依賴邏輯呼叫超時,進入步驟8.

6.判斷邏輯是否呼叫成功。返回成功呼叫結果;呼叫出錯,進入步驟8.

7.計算熔斷器狀態,所有的執行狀態(成功, 失敗, 拒絕,超時)上報給熔斷器,用於統計從而判斷熔斷器狀態.

8.getFallback()降級邏輯。以下四種情況將觸發getFallback呼叫:

run()方法丟擲非HystrixBadRequestException異常。

run()方法呼叫超時

熔斷器開啟攔截呼叫

執行緒池/佇列/訊號量是否跑滿

沒有實現getFallback的Command將直接丟擲異常,fallback降級邏輯呼叫成功直接返回,降級邏輯呼叫失敗丟擲異常.

9.返回執行成功結果

相關文章