斷路器對比Sentinel、Hystrix、resilience4j

Sentinel

強大的流量控制組件,爲微服務提供可靠性、彈性和監控,面向雲原生微服務的高可用流控防護組件。

隨着微服務的流行,服務和服務之間的穩定性變得越來越重要。Sentinel 以流量爲切入點,從流量控制、熔斷降級、系統負載保護等多個維度保護服務的穩定性。

Sentinel 具有以下特徵:

  • 豐富的應用場景:Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,例如秒殺(即突發流量控制在系統容量可以承受的範圍)、消息削峯填谷、集羣流量控制、實時熔斷下游不可用應用等。
  • 完備的實時監控:Sentinel 同時提供實時的監控功能。您可以在控制檯中看到接入應用的單臺機器秒級數據,甚至 500 臺以下規模的集羣的彙總運行情況。
  • 廣泛的開源生態:Sentinel 提供開箱即用的與其它開源框架/庫的整合模塊,例如與 Spring Cloud、Dubbo、gRPC 的整合。您只需要引入相應的依賴並進行簡單的配置即可快速地接入 Sentinel。
  • 完善的 SPI 擴展點:Sentinel 提供簡單易用、完善的 SPI 擴展接口。您可以通過實現擴展接口來快速地定製邏輯。例如定製規則管理、適配動態數據源等。

Hystrix

Hystrix是一個延遲和容錯庫,旨在隔離遠程系統、服務和第三方庫的訪問點,停止級聯故障,並在故障不可避免的複雜分佈式系統中實現恢復能力。

在分佈式環境中,許多服務依賴項中的一些不可避免地會失敗。Hystrix是一個庫,通過添加延遲容忍和容錯邏輯,幫助您控制這些分佈式服務之間的交互。Hystrix通過隔離服務之間的訪問點、停止服務之間的級聯故障以及提供回退選項來實現這一點,所有這些都提高了系統的總體彈性。
Hystrix是從Netflix API團隊2011年開始的彈性工程工作中發展而來的。2012年,Hystrix繼續發展和成熟,Netflix內部的許多團隊都採用了它。今天,Netflix每天都有數百億個線程被隔離,數千億個信號量被隔離的調用通過Hystrix執行。這導致了正常運行時間和彈性的顯著改善。

Resilience4j

Resilience4j是一個爲Java8和函數式編程設計的容錯庫。

Resilience4j是一個受Netflix Hystrix啓發的輕量級容錯庫,但它是爲Java 8和函數式編程設計的。輕量級,因爲庫只使用Vavr,它沒有任何其他外部庫依賴項。相比之下,Netflix Hystrix對Archaius有一個編譯依賴關係,Archaius有更多的外部庫依賴關係,如Guava和Apache Commons配置。

Resilience4j提供高階函數(decorators)來增強任何功能接口、lambda表達式或方法引用,包括斷路器、速率限制器、重試或隔板。可以在任何函數接口、lambda表達式或方法引用上堆疊多個裝飾器。優點是您可以選擇所需的裝飾器,而無需其他任何東西。

功能對比

  Sentinel Hystrix(維護狀態) Resilience4j(Spring推薦)
開發者 alibaba Netflix 獨立
隔離策略 信號量隔離(併發線程數限流) 線程池隔離/信號量隔離 信號量隔離
熔斷降級策略 基於響應時間、異常比率、異常數 基於異常比率 基於異常比率、響應時間
實時統計實現 滑動窗口(LeapArray) 滑動窗口(基於 RxJava) Ring Bit Buffer
動態規則配置 支持多種數據源 支持多種數據源 有限支持
擴展性 多個擴展點 插件的形式 接口的形式
基於註解的支持 支持 支持 支持
限流 基於 QPS,支持基於調用關係的限流 有限的支持 Rate Limiter
流量整形 支持預熱模式、勻速器模式、預熱排隊模式 不支持 簡單的 Rate Limiter 模式
系統自適應保護 支持 不支持 不支持
控制檯 提供開箱即用的控制檯,可配置規則、查看秒級監控、機器發現等 簡單的監控查看 不提供控制檯,可對接其它監控系統

github

star(2020.6)

12.6 19.8k 5.6k

優缺點

Sentinel 

  1. 輕量級,核心庫無多餘依賴,性能損耗小。
  2. 方便接入,開源生態廣泛。Sentinel 對 Dubbo、Spring Cloud、Web Servlet、gRPC 等常用框架提供適配模塊,只需引入相應依賴並簡單配置即可快速接入;同時針對自定義的場景 Sentinel 還提供低侵入性的註解資源定義方式,方便自定義接入。
  3. 豐富的流量控制場景。Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,流控維度包括流控指標、流控效果(塑形)、調用關係、熱點、集羣等各種維度,針對系統維度也提供自適應的保護機制。
  4. 易用的控制檯,提供實時監控、機器發現、規則管理等能力。
  5. 完善的擴展性設計,提供多樣化的 SPI 接口,方便用戶根據需求給 Sentinel 添加自定義的邏輯。

Resilience4j

Resilience4j 是比較輕量的庫,在較小較新的項目中使用還是比較方便的,但是 Resilience4j 只包含限流降級的基本場景,對於非常複雜的企業級服務架構可能無法很好地 cover 住;同時 Resilience4j 缺乏生產級別的配套設施(如提供規則管理和實時監控能力的控制檯)。

Resilience patterns

name類型 how does it work? description描述 links

重試

重寫執行失敗請求

部分請求可能偶爾失敗,重寫請求可能恢復正常

overviewdocumentationSpring

斷路器

部分服務可能出現故障

當服務不可用時,快速失敗

overviewdocumentationFeignRetrofitSpring

限速

限制週期內請求數

限制接受請求的速率

overviewdocumentationFeignRetrofitSpring

限時

限制執行期限

超過一定等待時間將不能返回正確結果

documentationRetrofitSpring

隔離

限制併發執行

失敗資源放入隔離區

overviewdocumentationSpring

緩存

緩存一個成功結果

相似請求返回

documentation

備路

爲失敗請求提供另一個結果

請求失敗後的處理

Try::recoverSpringFeign

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章