微服務別再用 Hystrix 作為熔斷組件了

微服務別再用 Hystrix 作為熔斷組件了

1. 前言

Spring Cloud 之前使用的斷路器是 Netfilx 開源的 Hystrix 。被很多微服務開發者作為默認的斷路器來使用。2018年11月,當 Netflix 宣佈將這個項目置於維護模式時(不再開發新特性,只進行例行維護),Spring Cloud 官方也不得不跟進了 Netfix ,在 SpringOne 2019中,Spring 宣佈將從 Spring Cloud 3.1 版本中刪除 Hystrix 儀表板。要不了多長時間 Spring Cloud Netfix 將結束生命週期。

2. Spring Cloud Circuit Breaker

為了填補 Spring Cloud Netfix 留下的空白, Spring Cloud Circuit Breaker 項目應運而生。這並不是一個實際的斷路器,而是一個斷路器的抽象層。它提供了一套規範API,開發人員可以根據實際選擇符合需求的斷路器實現。目前提供四種斷路器實現:

  • Netfix Hystrix
  • Resilience4J
  • Sentinel
  • Spring Retry

Hystrix 已經快成為過去式了。 而 Spring Retry 我個人認為並不是為了微服務而生。推薦在新項目中使用 Resilience4J 或者 Sentinel

2.1 Resilience4J

微服務別再用 Hystrix 作為熔斷組件了

Resilience4j 是受 Hystrix 啟發的輕量級容錯庫,專為 Java 8 和函數式編程而設計。而且該庫僅僅依賴一個 Java 函數式編程增強庫 Vavr 而沒有其它依賴。它提供了高階函數,斷路器,速率限制器,重試或艙壁隔離功能來對功能接口進行增強,另外還有度量標準模塊對運行指標進行跟蹤。

  • 優點:功能比較全,相比 Hystrix 支持流量控制,輕量級,而且都是模塊化的,支持函數式編程。
  • 缺點:監控目前只提供度量API,需要自己整合,但是我覺得這個不是問題,畢竟 micrometer 也非常簡單。

2.2 Sentinel

微服務別再用 Hystrix 作為熔斷組件了

阿里巴巴中間件團隊出品,現在是 Spring Cloud Alibaba 生態的一部分。功能和 Resilience4J 類似,亮點在於有流量塑形功能,對隨機不規則、不受控的流量進行規則化處理;另外一個亮點在於有監控的 dashboard ,不像 Resilience4j 需要自己開發。而且 也是 Spring Cloud Alibaba 體系的一部分。

3. 總結

其實經過 Spring Cloud Circuit Breaker 的整合後使用都不會特別的困難,難點在於自定義,功能上 Sentinel 更加全面一些,但是有時候業務並不是需要什麼都有。 Resilience4j 大部分場景都能夠滿足,函數編程也更加優雅。這兩個選擇沒有太多的高下之分。多說一句 Vavr 函數庫非常不錯,有興趣可以去體驗一下。只是 Hystrix 新項目還是不要再用了,雖然是一個非常好的斷路器組件,但是它的歷史使命差不多已經完成了。


分享到:


相關文章: