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
- 輕量級,核心庫無多餘依賴,性能損耗小。
- 方便接入,開源生態廣泛。Sentinel 對 Dubbo、Spring Cloud、Web Servlet、gRPC 等常用框架提供適配模塊,只需引入相應依賴並簡單配置即可快速接入;同時針對自定義的場景 Sentinel 還提供低侵入性的註解資源定義方式,方便自定義接入。
- 豐富的流量控制場景。Sentinel 承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,流控維度包括流控指標、流控效果(塑形)、調用關係、熱點、集羣等各種維度,針對系統維度也提供自適應的保護機制。
- 易用的控制檯,提供實時監控、機器發現、規則管理等能力。
- 完善的擴展性設計,提供多樣化的 SPI 接口,方便用戶根據需求給 Sentinel 添加自定義的邏輯。
Resilience4j
Resilience4j 是比較輕量的庫,在較小較新的項目中使用還是比較方便的,但是 Resilience4j 只包含限流降級的基本場景,對於非常複雜的企業級服務架構可能無法很好地 cover 住;同時 Resilience4j 缺乏生產級別的配套設施(如提供規則管理和實時監控能力的控制檯)。
Resilience patterns
name類型 | how does it work? | description描述 | links |
---|---|---|---|
重試 |
重寫執行失敗請求 |
部分請求可能偶爾失敗,重寫請求可能恢復正常 |
|
斷路器 |
部分服務可能出現故障 |
當服務不可用時,快速失敗 |
|
限速 |
限制週期內請求數 |
限制接受請求的速率 |
|
限時 |
限制執行期限 |
超過一定等待時間將不能返回正確結果 |
|
隔離 |
限制併發執行 |
失敗資源放入隔離區 |
|
緩存 |
緩存一個成功結果 |
相似請求返回 |
|
備路 |
爲失敗請求提供另一個結果 |
請求失敗後的處理 |