天天看點

hystrix 源碼 線程池隔離_Spring Cloud Hystrix 源碼學習合集

# Spring Cloud Hystrix 源碼學習合集

**Hystrix: Latency and Fault Tolerance for Distributed Systems**

![](https://imgcdn.chenyongjun.vip/2019/01/14/935800df06cf42fd9093ab2f49b5d3a5.png)

近期逐漸學習了 Hystrix 這位 **"守護神"** 的部分源碼,本文作為 Hystrix 系列的小結篇。

在剛看完一丢丢源碼時,Netflix 官友善已宣布進入 **"維護模式"**,版本定格在 **1.5.18**,官宣該版本已足夠滿足現存應用的需求。同時,官方也推薦了 [**resilience4j**](https://github.com/resilience4j/resilience4j) 這個活躍項目,另阿裡系的 [**Sentinel**](https://github.com/alibaba/Sentinel) 也現也十分火熱。

對于早已投産的系統來說,Hystrix 自然是重點,無論是 Zuul 路由,還是 Feign 做服務間的調用,它們都結合了 Hystrix 來守護系統。

下面是幾篇粗淺的源碼學習文章,學習了其工作原理、守護技能(降級、隔離、熔斷)、性能提升(請求緩存、合并)等。因請求合并少用,未做學習。

* [Spring Cloud 源碼學習之 Hystrix 入門](https://chenyongjun.vip/articles/75)

* [Spring Cloud 源碼學習之 Hystrix 工作原理](https://chenyongjun.vip/articles/88)

* [Spring Cloud 源碼學習之 Hystrix Metrics 收集](https://chenyongjun.vip/articles/89)

* [Spring Cloud 源碼學習之 Hystrix 熔斷器](https://chenyongjun.vip/articles/90)

* [Spring Cloud 源碼學習之 HystrixRequestContext](https://chenyongjun.vip/articles/91)

* [Spring Cloud 源碼學習之 Hystrix 請求緩存](https://chenyongjun.vip/articles/93)

* [Spring Cloud 源碼學習之 Hystrix 隔離政策](https://chenyongjun.vip/articles/95)

Hystrix 源碼學習收獲不小,羅列幾點:

* **工欲善其事,必先利其器** & **産生對響應式的興趣**

Hystrix 基于 RxJava 進行實作,RxJava 是一種基于觀察者模式的響應式程式設計架構。我也花了不少時間對其概念和Hystrix 中所使用的方法做了些學習,産生了學習興趣。Hystrix 的決策(如熔斷、線程池/信号量拒絕)都需要資料支撐,而這些資料就是在各個 Command 執行時不斷産生,借着 RxJava 十分便利的收集、聚合。

* **隔離設計是絕妙的防護罩**

在單體應用中,一類服務、一個線程、一個Bug等局部因素壓垮整個系統也是屢見不鮮。微服務中,服務間依賴重重,通過隔離,很好的控制住風險範圍,再結合請求拒絕和逾時控制,有效剔除 "老鼠屎",避免壞了一鍋粥。

同時也見識了線程池隔離,以後需要做類似的事情時也是非常好的參考。

![](https://imgcdn.chenyongjun.vip/2019/01/14/d68d2684ceb1404fbb9bd80c027df8a4.png)

* **特定生命周期存儲結構的設計**

日常開發也就接觸 ThreadLocal 這種 thread-scoped 類型的資料結構,偶爾還得徒手在非父子線程間傳遞資料。

HystrixRequestContext 的出現令人恍然大悟,設計了 request-scoped 的存儲結構,原來任務本身就是線程間資訊傳遞最好的載體,以後就可以設計出 **任意生命周期** 内的存儲結構了。

* **好的技術産品,拓展性肯定非常好**

不同垂直業務場景,需求也是多種多樣。良好的拓展性,使得技術産品具備良好的彈性,開發人員可以基于設計的拓展機制實作各項功能。例如:Hystrix 中有很多下面樣式的代碼,它們設計在了Command執行過程中,預設實作其實啥也沒做,但是為開發人員在必要時提供了拓展入口。

```java

executionHook.onStart(...);

eventNotifier.markEvent(...);

```

而Spring Cloud 全家桶,拓展性更是處處可見,如:Zuul 的過濾器、Feign 對于請求和響應提供的攔截器等。

* **擁有良好的恢複能力自然更健康**

熔斷的設計,在服務出現問題時可以起到很好的保護作用,避免壓垮服務的最後一根稻草滲透進去。然後逐漸利用**請求探針** 試探一下服務,如果恢複健康,則自動關閉熔斷。

如果任由請求肆虐,服務早就死翹了吧。

如果使用微服務并已上線,深入學習各元件的原理和原理還是非常有必要,否則遇到問題就隻能懵逼,然後重新開機大法好了。

其他 Spring Cloud 文章:

* [Spring Cloud 之極端續租間隔時間的影響](https://chenyongjun.vip/articles/70)

* [Spring Cloud 源碼學習之 Zuul](https://chenyongjun.vip/articles/72)

* [Spring Cloud 實戰之 Zuul 網關不響應任何請求](https://chenyongjun.vip/articles/76)

* [Spring Cloud 源碼學習之 Feign](https://chenyongjun.vip/articles/94)

掃碼或搜尋 codercyj 關注微信公衆号, 結伴學習, 一起努力

hystrix 源碼 線程池隔離_Spring Cloud Hystrix 源碼學習合集