開發與維運

Sentinel 1.8.0 年度版本發佈,熔斷降級重構升級

在經過數月的打磨後,Sentinel 1.8.0 版本正式發佈!該版本是本年度最重要的版本之一,包含大量特性改進與 bug 修復,尤其是針對熔斷降級特性的完善升級(支持任意統計時長、慢調用比例降級策略、熔斷器事件監聽);同時該版本進一步擴充了開源生態,提供對 Java EE (JAX-RS, CDI), Quarkus, HTTP client 等體系的原生支持。詳細特性列表請參考 Release Notes,歡迎大家使用並提出建議。

下面我們來一起探索一下 Sentinel 1.8.0 的重要特性。

熔斷降級改進

一個服務常常會調用別的模塊,可能是另外的一個遠程服務、數據庫,或者第三方 API 等。例如,支付的時候,可能需要遠程調用銀聯提供的 API;查詢某個商品的價格,可能需要進行數據庫查詢。然而,這個被依賴服務的穩定性是不能保證的。如果依賴的服務出現了不穩定的情況,請求的響應時間變長,那麼調用服務的方法的響應時間也會變長,線程會產生堆積,最終可能耗盡業務自身的線程池,服務本身也變得不可用。

現代微服務架構都是分佈式的,由非常多的服務組成。不同服務之間相互調用,組成複雜的調用鏈路。以上的問題在鏈路調用中會產生放大的效果。複雜鏈路上的某一環不穩定,就可能會層層級聯,最終導致整個鏈路都不可用。因此我們需要對不穩定的弱依賴服務進行自動熔斷,暫時切斷不穩定調用,避免局部不穩定因素導致整體的雪崩。

Sentinel 1.8.0 版本對原有的熔斷降級模塊進行了重構和升級,重新以熔斷器(cicuit breaker)的形式進行抽象,並進一步完善了熔斷器的能力。新版熔斷降級支持任意統計時長,用戶可以根據接口的場景靈活配置統計維度為秒級或者分鐘級;同時我們也引入了用戶需要的半開啟探測恢復支持。新版熔斷降級還對原有的秒級平均 RT 策略進行了升級,原有 RT 策略對稀疏請求不友好,並且採用平均 RT 可能會被某個特別慢的調用影響。1.8.0 版本將基於響應時長的策略升級為慢調用比例策略,用戶指定響應時長超出多少記為慢調用(即穩態 RT 的上界),同時配置慢調用比例閾值,結合場景配置統計時長維度,即可更好地針對慢調用進行熔斷。用戶可以結合 Sentinel 控制檯的實時監控來決定穩態 RT 的閾值。

同時考慮到用戶可能需要感知熔斷器的狀態變化以進行一些日誌記錄或其它的操作,Sentinel 提供了熔斷器的事件監聽器擴展,用戶可以註冊自定義的事件監聽器以感知熔斷器狀態變化。示例:

EventObserverRegistry.getInstance().addStateChangeObserver("logging",

(prevState, newState, rule, snapshotValue) -> {
    if (newState == State.OPEN) {
        // 變換至 OPEN state 時會攜帶觸發時的值
        System.err.println(String.format("%s -> OPEN at %d, snapshotValue=%.2f", prevState.name(),
            TimeUtil.currentTimeMillis(), snapshotValue));
    } else {
        System.err.println(String.format("%s -> %s at %d", prevState.name(), newState.name(),
            TimeUtil.currentTimeMillis()));
    }
});

至此,Sentinel 已提供三種熔斷策略:慢調用比例、異常比例和異常數。有關熔斷降級特性的更多信息請參考 熔斷降級文檔。

開源生態與雲原生

Sentinel 1.8.0 進一步擴充了開源生態。Sentinel 1.8.0 引入了 Java EE 原生支持,提供對 JAX-RS Web 應用的原生支持(sentinel-jax-rs-adapter),以及基於 CDI 的註解埋點支持(sentinel-annotation-cdi-interceptor),對於採用原生 Java EE 架構的服務可以更方便地接入。

image.png
Quarkus 作為廣受關注的雲原生微服務框架,在微服務框架中活躍度排名前列。Sentinel 1.8.0 提供了針對 Quarkus 的適配模塊,支持 Quarkus Web 服務無縫集成(基於 JAX-RS 適配),並且通過 CDI 註解埋點支持和 Reactor 適配,可以針對 Quarkus 服務中的任意邏輯進行流控。Quarkus 適配模塊支持構建 native image,感興趣的開發者歡迎參考 demo 進行嘗試。

至此,Sentinel 的開源生態得到進一步擴充:
image.png

其它重要特性/改進

  • @SentinelResource 註解支持配置類級別統一的 defaultFallback
    修復 Dubbo 2.7.x 適配模塊 Entry 洩漏可能導致 FGC 的 bug

修復 Spring Web 適配模塊在內部轉發請求時可能導致 ErrorEntryFreeException 的 bug
支持通過 properties 配置文件配置 project.name(至此所有啟動配置項均可通過文件配置)
新增 Eureka 數據源支持
更多信息請參考 Release Notes。

Start hacking

Sentinel 1.8.0 是社區一起定義的年度版本,近 80% 的特性都是社區開發者貢獻的。感謝各位貢獻者的付出!同時我們非常歡迎大家持續參與社區貢獻,一起來參與未來版本的演進。若您有意願參與社區貢獻,歡迎聯繫我們加入 Sentinel 貢獻小組一起成長(Sentinel 開源討論釘釘群:30150716)。我們會定期給活躍貢獻者寄送小禮品,核心貢獻者會提名為 committer,一起主導社區的演進。同時,也歡迎大家通過 AHAS Sentinel 控制檯 來快速體驗 Sentinel 的能力。Now let's start hacking!

Leave a Reply

Your email address will not be published. Required fields are marked *