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 架构的服务可以更方便地接入。
Quarkus 作为广受关注的云原生微服务框架,在微服务框架中活跃度排名前列。Sentinel 1.8.0 提供了针对 Quarkus 的适配模块,支持 Quarkus Web 服务无缝集成(基于 JAX-RS 适配),并且通过 CDI 注解埋点支持和 Reactor 适配,可以针对 Quarkus 服务中的任意逻辑进行流控。Quarkus 适配模块支持构建 native image,感兴趣的开发者欢迎参考 demo 进行尝试。
至此,Sentinel 的开源生态得到进一步扩充:
其它重要特性/改进
- @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!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Dubbo 3.0 - 开启下一代云原生微服务
作者 | 郭浩(项升) 阿里巴巴经济体 RPC 框架负责人 导读:本文整理自作者于 2020 年云原生微服务大会上的分享《Dubbo3.0 - 开启下一代云原生微服务》,主要介绍了关于思考 rpc 框架层面,功能演进的方向是什么?以及怎么更好地支持云上的多语言开发的新思考。 关注阿里巴巴云原生公众号,后台回复【818】即可获取直播回看地址和大会 PPT 合集。 看到这个题目,大家可能会有几个问题,比如,什么是云原生微服务?Dubbo3.0 是什么?和目前的 Dubbo2.0 有什么区别?用了 Dubbo3.0 会带来哪些业务视角的好处?后面的分享会对这些问题逐一解答。 这次分享分为以下几个环节: Dubbo 的演进历史 Dubbo 的开源现状 定义 Dubbo3.0 分享 Dubbo 3.0 目前取得的一些成果 考虑到有些同学对 Dubbo 可能不太熟悉,在介绍背景之前,我先简单介绍一下 Dubbo 是什么。简单地说,Dubbo 是基于 Java 的 RPC 框架。一个 RPC 框架至少由数据格式、传输协议和连接管理组成,这三点也是构成核心。Dubbo 能够被广泛应用主要有两个原因: ...
- 下一篇
阿里研究员谷朴:警惕软件复杂度困局
作者 |张瓅玶(谷朴) 阿里巴巴研究员 导读:对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演进的过程中需要遵循哪些原则?本文将分享阿里研究员谷朴关于软件复杂度的思考:什么是复杂度、复杂度是如何产生的以及解决的思路。较长,同学们可收藏后再看。 软件设计和实现的本质是工程师相互通过“写作”来交流一些包含丰富细节的抽象概念并且不断迭代过程。> 另外,如果你的代码生存期一般不超过 6 个月,本文用处不大。 软件架构的核心挑战是快速增长的复杂性 越是大型系统,越需要简单性。 大型系统的本质问题是复杂性问题。互联网软件,是典型的大型系统,如下图所示,数百个甚至更多的微服务相互调用/依赖,组成一个组件数量大、行为复杂、时刻在变动(发布、配置变更)当中的动态的、复杂的系统。而且,软件工程师们常常自嘲,“when things work, nobody knows why”。 图源:https://divante.com/blog/10-companies-that-implemented-the-microservice...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Windows10,CentOS7,CentOS8安装Nodejs环境