在學習Hystrix之前,首先引入一個問題場景,服務雪崩。如下圖所示:

可以看到,三個入口服務A、B、C最終都會請求到服務T。當服務T的請求過載,打滿CPU都無法匹配請求的頻率時,同步呼叫的上級服務就會逐級發生阻塞,最終導致所有服務陷入癱瘓狀態,這就是服務雪崩的一種場景。如何解決雪崩?常見的幾種方式就是降級、隔離、熔斷、請求快取以及請求合併。那麼Hystrix是如何實現這幾個功能的呢?在開始程式碼實踐前,有必要對原理進行一定程度的瞭解。

再通過一張流程圖來加深對上方圖中鏈路的理解:

1. 構造一個 HystrixCommand或HystrixObservableCommand物件,用於封裝請求,並在構造方法 配置請求被執行需要的引數;

2. 執行命令,Hystrix提供了4種執行命令的方法,後面詳述;

3. 判斷是否使用快取響應請求,若啟用了快取,且快取可用,直接使用快取響應請求。Hystrix支援請求快取,但需要使用者自定義啟動;

4. 判斷熔斷器是否開啟,如果開啟,跳到第8步;

5. 判斷執行緒池/佇列/訊號量是否已滿,已滿則跳到第8步;

6. 執行HystrixObservableCommand.construct()或HystrixCommand.run(),如果執行失敗或者超時跳,到第8步;否則,跳到第9步;

7. 統計熔斷器監控指標;

8. 走Fallback備用邏輯;

9. 返回請求響應

參考資料:

https://www.cnblogs.com/yb-ken/p/15068392.html

http://www.uml.org.cn/wfw/201906063.asp?artid=22057