Sentinel熔断规则原理示例详解分析

 更新时间:2021年09月01日 11:21:00   作者:潮汐先生  
这篇文章主要介绍了Sentinel熔断规则,采用了示例代码的方式对Sentinel熔断规则进行了详细的分析,以便广大读者朋友们更易理解,有需要的朋友可以参考下

概述

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。

由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。

Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时、异常比例升高、异常数堆积)

对这个资源的调用进行限制,让请求快速失败从而避免影响到其它的资源而导致级联错误。

当资源被降级后,在接下来的降级时间窗口之内会对该资源的调用自动熔断

(默认行为是抛出 DegradeException)。

综上可知:

  • 熔断是用来避免服务架构中的雪崩的发生
  • 当监控到链路中的异常(响应时间超时、异常比例升高、异常数堆积)达到阈值自动触发熔断
  • 在降级时间窗口之内会对该资源的调用自动熔断

熔断(降级)策略

慢调用比例

概念

慢调用比例 (SLOW_REQUEST_RATIO):

选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),

请求的响应时间大于该值则统计为慢调用。

当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,

并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。

经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),

若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

在这里插入图片描述

注意Sentinel默认统计的RT上限是4900ms,超出此阈值的都会算作4900ms,

若需要变更此上限可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=xxx来配置

测试

我们在Sentinel DashBoard界面点击熔断规则,然后按照下图配置新增慢调用比例的熔断规则。

如下所示

在这里插入图片描述

然后我们在浏览器访问http://localhost:8990/test/hello,连续快速刷新该请求,可以看到服务被熔断。30s后自动恢复

在这里插入图片描述

我们本次使用的Sentinel版本是1.8.2,在1.8之前的版本慢调用比例就是RT,

慢调用相较于之前的RT加入了比例阈值,相当于多加了一个条件。

慢调用比例的熔断时机:在统计时长内,请求数大于5个,如若大于指定比例阈值的请求数的响应时间都大于最大RT,

那么会熔断该服务,熔断时间为设置的熔断时长

异常比例

概念

异常比例 (DEGRADE_GRADE_EXCEPTION_RATIO):当资源的每秒请求量 >= N(可配置),

并且每秒异常总数占通过量的比值超过阈值(DegradeRule 中的 count)之后,

资源进入降级状态,即在接下的时间窗口(DegradeRule 中的 timeWindow,以 s 为单位)之内,

对这个方法的调用都会自动地返回。

异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。

在这里插入图片描述

测试

相较于慢调用比例,异常比例就简单了,通过修改或者新增熔断规则我们可以发现当我们选择异常比例时,

只是比慢调用比例少了一个RT。

我们按照下图所示配置异常比例的熔断规则,如下所示:

在这里插入图片描述

为了演示异常我们修改下TestController.java中的/test/hello方法。

如下所示:

@RequestMapping("/hello")
public String sayHello(Integer id){
  log.info("Hello, Sentinel!");
  if(id < 0){
    throw new RuntimeException();
  }
  return "Hello, Sentinel!";
}

然后我们在浏览器访问http://localhost:8990/test/hello?id=-1,连续快速刷新该请求,

当请求数大于5个且异常比例阈值大于0.1时就会自动熔断

在这里插入图片描述

这是一个拼手速的实验,点击速度慢的小伙伴可以把统计时长调长一些(默认最大为4900ms)

异常数

概念

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT):当资源近 1 分钟的异常数目超过阈值之后会进行熔断。

注意由于统计时间窗口是分钟级别的,若 timeWindow 小于 60s,

则结束熔断状态后仍可能再进入熔断状态。

在这里插入图片描述

测试

相比于前面两个异常数就更简单了,我们按下图所示修改熔断规则。

如图所示:

在这里插入图片描述

还是使用测试异常比例的demo进行演示这个效果,我们在浏览器狂刷请求http://localhost:8990/test/hello?id=-1,

放异常数达到5个后就会自动熔断该服务了。

如下图所示:

在这里插入图片描述

以上就是Sentinel熔断规则原理示例详解分析的详细内容,更多关于Sentinel熔断规则的资料请关注脚本之家其它相关文章!

相关文章

  • Java中双重检查锁(double checked locking)的正确实现

    Java中双重检查锁(double checked locking)的正确实现

    双重检查锁(Double-Check Locking),顾名思义,通过两次检查,并基于加锁机制,实现某个功能,下面这篇文章主要给大家介绍了关于Java中双重检查锁(double checked locking)的相关资料,需要的朋友可以参考下
    2021-09-09
  • Java动态代理四种实现方式详解

    Java动态代理四种实现方式详解

    这篇文章主要介绍了Java四种动态代理实现方式,对于开始学习java动态代理或者要复习java动态代理的朋友来讲很有参考价值,有感兴趣的朋友可以参考一下
    2021-04-04
  • Spring Boot中捕获异常错误信息并将其保存到数据库中的操作方法

    Spring Boot中捕获异常错误信息并将其保存到数据库中的操作方法

    这篇文章主要介绍了Spring Boot中捕获异常错误信息并将其保存到数据库中的操作方法,通过实例代码介绍了使用Spring Data JPA创建一个异常信息的存储库接口,以便将异常信息保存到数据库,需要的朋友可以参考下
    2023-10-10
  • Java定时清理过期文件的实例代码

    Java定时清理过期文件的实例代码

    这篇文章主要介绍了Java定时清理过期文件的实例代码,非常不错,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2018-12-12
  • Java foreach循环是否可以修改数据的值问题解决方法

    Java foreach循环是否可以修改数据的值问题解决方法

    最近在做项目的时候,需要修改一个数组里面各个元素的值,foreach循环迭代数组元素时,不能改变数组元素的值,这篇文章给大家介绍Java foreach循环是否可以修改数据的值的问题及解决方法,感兴趣的朋友一起看看吧
    2024-02-02
  • Idea中Springboot热部署无效问题解决

    Idea中Springboot热部署无效问题解决

    这篇文章主要介绍了Idea中Springboot热部署无效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • 关于spring中不同包中类名相同报错问题的总结

    关于spring中不同包中类名相同报错问题的总结

    这篇文章主要介绍了关于spring中不同包中类名相同报错问题的总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • protobuf简介及使用流程

    protobuf简介及使用流程

    本文介绍了Protocol Buffers(protobuf)的数据结构序列化和反序列化框架,包括其特点、使用流程和快速上手,通过一个简单的通讯录示例,展示了如何创建.proto文件、添加注释、编写消息定义、编译.proto文件以及进行序列化和反序列化操作,感兴趣的朋友一起看看吧
    2025-02-02
  • Java调用第三方接口示范的实现

    Java调用第三方接口示范的实现

    这篇文章主要介绍了Java调用第三方接口示范的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • SpringQuartz集群支持JDBC存储与分布式执行的最佳实践

    SpringQuartz集群支持JDBC存储与分布式执行的最佳实践

    SpringQuartz集群通过JDBC存储和分布式执行机制,有效解决了单点故障和扩展性问题,本文将详细介绍SpringQuartz集群支持的实现原理、配置方法和最佳实践,助力开发者构建稳定可靠的分布式调度系统,感兴趣的朋友一起看看吧
    2025-04-04

最新评论