Sentinel 1.8.0 年度版本发布,熔断降级重构升级!
在經(jīng)過(guò)數(shù)月的打磨后,Sentinel 1.8.0 版本正式發(fā)布!該版本是本年度最重要的版本之一,包含大量特性改進(jìn)與 bug 修復(fù),尤其是針對(duì)熔斷降級(jí)特性的完善升級(jí)(支持任意統(tǒng)計(jì)時(shí)長(zhǎng)、慢調(diào)用比例降級(jí)策略、熔斷器事件監(jiān)聽(tīng));同時(shí)該版本進(jìn)一步擴(kuò)充了開(kāi)源生態(tài),提供對(duì) Java EE (JAX-RS, CDI), Quarkus, HTTP client 等體系的原生支持。詳細(xì)特性列表請(qǐng)參考 Release Notes,歡迎大家使用并提出建議。
下面我們來(lái)一起探索一下 Sentinel 1.8.0 的重要特性。
熔斷降級(jí)改進(jìn)
一個(gè)服務(wù)常常會(huì)調(diào)用別的模塊,可能是另外的一個(gè)遠(yuǎn)程服務(wù)、數(shù)據(jù)庫(kù),或者第三方 API 等。例如,支付的時(shí)候,可能需要遠(yuǎn)程調(diào)用銀聯(lián)提供的 API;查詢某個(gè)商品的價(jià)格,可能需要進(jìn)行數(shù)據(jù)庫(kù)查詢。然而,這個(gè)被依賴服務(wù)的穩(wěn)定性是不能保證的。如果依賴的服務(wù)出現(xiàn)了不穩(wěn)定的情況,請(qǐng)求的響應(yīng)時(shí)間變長(zhǎng),那么調(diào)用服務(wù)的方法的響應(yīng)時(shí)間也會(huì)變長(zhǎng),線程會(huì)產(chǎn)生堆積,最終可能耗盡業(yè)務(wù)自身的線程池,服務(wù)本身也變得不可用。
現(xiàn)代微服務(wù)架構(gòu)都是分布式的,由非常多的服務(wù)組成。不同服務(wù)之間相互調(diào)用,組成復(fù)雜的調(diào)用鏈路。以上的問(wèn)題在鏈路調(diào)用中會(huì)產(chǎn)生放大的效果。復(fù)雜鏈路上的某一環(huán)不穩(wěn)定,就可能會(huì)層層級(jí)聯(lián),最終導(dǎo)致整個(gè)鏈路都不可用。因此我們需要對(duì)不穩(wěn)定的弱依賴服務(wù)進(jìn)行自動(dòng)熔斷,暫時(shí)切斷不穩(wěn)定調(diào)用,避免局部不穩(wěn)定因素導(dǎo)致整體的雪崩。
Sentinel 1.8.0 版本對(duì)原有的熔斷降級(jí)模塊進(jìn)行了重構(gòu)和升級(jí),重新以熔斷器(cicuit breaker)的形式進(jìn)行抽象,并進(jìn)一步完善了熔斷器的能力。新版熔斷降級(jí)支持任意統(tǒng)計(jì)時(shí)長(zhǎng),用戶可以根據(jù)接口的場(chǎng)景靈活配置統(tǒng)計(jì)維度為秒級(jí)或者分鐘級(jí);同時(shí)我們也引入了用戶需要的半開(kāi)啟探測(cè)恢復(fù)支持。新版熔斷降級(jí)還對(duì)原有的秒級(jí)平均 RT 策略進(jìn)行了升級(jí),原有 RT 策略對(duì)稀疏請(qǐng)求不友好,并且采用平均 RT 可能會(huì)被某個(gè)特別慢的調(diào)用影響。1.8.0 版本將基于響應(yīng)時(shí)長(zhǎng)的策略升級(jí)為慢調(diào)用比例策略,用戶指定響應(yīng)時(shí)長(zhǎng)超出多少記為慢調(diào)用(即穩(wěn)態(tài) RT 的上界),同時(shí)配置慢調(diào)用比例閾值,結(jié)合場(chǎng)景配置統(tǒng)計(jì)時(shí)長(zhǎng)維度,即可更好地針對(duì)慢調(diào)用進(jìn)行熔斷。用戶可以結(jié)合 Sentinel 控制臺(tái)的實(shí)時(shí)監(jiān)控來(lái)決定穩(wěn)態(tài) RT 的閾值。
同時(shí)考慮到用戶可能需要感知熔斷器的狀態(tài)變化以進(jìn)行一些日志記錄或其它的操作,Sentinel 提供了熔斷器的事件監(jiān)聽(tīng)器擴(kuò)展,用戶可以注冊(cè)自定義的事件監(jiān)聽(tīng)器以感知熔斷器狀態(tài)變化。示例:
EventObserverRegistry.getInstance().addStateChangeObserver("logging",
(prevState, newState, rule, snapshotValue) -> {if (newState == State.OPEN) {// 變換至 OPEN state 時(shí)會(huì)攜帶觸發(fā)時(shí)的值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 已提供三種熔斷策略:慢調(diào)用比例、異常比例和異常數(shù)。有關(guān)熔斷降級(jí)特性的更多信息請(qǐng)參考 熔斷降級(jí)文檔。
開(kāi)源生態(tài)與云原生
Sentinel 1.8.0 進(jìn)一步擴(kuò)充了開(kāi)源生態(tài)。Sentinel 1.8.0 引入了 Java EE 原生支持,提供對(duì) JAX-RS Web 應(yīng)用的原生支持(sentinel-jax-rs-adapter),以及基于 CDI 的注解埋點(diǎn)支持(sentinel-annotation-cdi-interceptor),對(duì)于采用原生 Java EE 架構(gòu)的服務(wù)可以更方便地接入。
Quarkus 作為廣受關(guān)注的云原生微服務(wù)框架,在微服務(wù)框架中活躍度排名前列。Sentinel 1.8.0 提供了針對(duì) Quarkus 的適配模塊,支持 Quarkus Web 服務(wù)無(wú)縫集成(基于 JAX-RS 適配),并且通過(guò) CDI 注解埋點(diǎn)支持和 Reactor 適配,可以針對(duì) Quarkus 服務(wù)中的任意邏輯進(jìn)行流控。Quarkus 適配模塊支持構(gòu)建 native image,感興趣的開(kāi)發(fā)者歡迎參考 demo 進(jìn)行嘗試。
至此,Sentinel 的開(kāi)源生態(tài)得到進(jìn)一步擴(kuò)充:
其它重要特性/改進(jìn)
- @SentinelResource 注解支持配置類級(jí)別統(tǒng)一的 defaultFallback
修復(fù) Dubbo 2.7.x 適配模塊 Entry 泄漏可能導(dǎo)致 FGC 的 bug
修復(fù) Spring Web 適配模塊在內(nèi)部轉(zhuǎn)發(fā)請(qǐng)求時(shí)可能導(dǎo)致 ErrorEntryFreeException 的 bug
支持通過(guò) properties 配置文件配置 project.name(至此所有啟動(dòng)配置項(xiàng)均可通過(guò)文件配置)
新增 Eureka 數(shù)據(jù)源支持
更多信息請(qǐng)參考 Release Notes。
Start hacking
Sentinel 1.8.0 是社區(qū)一起定義的年度版本,近 80% 的特性都是社區(qū)開(kāi)發(fā)者貢獻(xiàn)的。感謝各位貢獻(xiàn)者的付出!同時(shí)我們非常歡迎大家持續(xù)參與社區(qū)貢獻(xiàn),一起來(lái)參與未來(lái)版本的演進(jìn)。若您有意愿參與社區(qū)貢獻(xiàn),歡迎聯(lián)系我們加入 Sentinel 貢獻(xiàn)小組一起成長(zhǎng)(Sentinel 開(kāi)源討論釘釘群:30150716)。我們會(huì)定期給活躍貢獻(xiàn)者寄送小禮品,核心貢獻(xiàn)者會(huì)提名為 committer,一起主導(dǎo)社區(qū)的演進(jìn)。同時(shí),也歡迎大家通過(guò) AHAS Sentinel 控制臺(tái) 來(lái)快速體驗(yàn) Sentinel 的能力。Now let's start hacking!
?
原文鏈接
本文為阿里云原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
總結(jié)
以上是生活随笔為你收集整理的Sentinel 1.8.0 年度版本发布,熔断降级重构升级!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 分久必合的Lindorm传奇
- 下一篇: 重度使用Flutter研发模式下的页面性