服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Sentinel熔断规则原理示例详解分析

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

2021-12-13 14:31潮汐先生 Java教程

这篇文章主要介绍了Sentinel熔断规则,采用了示例代码的方式对Sentinel熔断规则进行了详细的分析,以便广大读者朋友们更易理解,有需要的朋友可以参考下

概述

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

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

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

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

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

(默认行为是抛出 DegradeException)。

综上可知:

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

 

熔断(降级)策略

慢调用比例

概念

慢调用比例 (SLOW_REQUEST_RATIO):

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

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

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

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

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

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

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

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

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

测试

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

如下所示

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

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

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

我们本次使用的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%。

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

测试

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

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

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

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

为了演示异常我们修改下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时就会自动熔断

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

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

异常数

概念

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

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

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

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

测试

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

如图所示:

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

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

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

如下图所示:

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

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

原文链接:https://blog.csdn.net/bbxylqf126com/article/details/119798018

延伸 · 阅读

精彩推荐
  • Java教程20个非常实用的Java程序代码片段

    20个非常实用的Java程序代码片段

    这篇文章主要为大家分享了20个非常实用的Java程序片段,对java开发项目有所帮助,感兴趣的小伙伴们可以参考一下 ...

    lijiao5352020-04-06
  • Java教程Java实现抢红包功能

    Java实现抢红包功能

    这篇文章主要为大家详细介绍了Java实现抢红包功能,采用多线程模拟多人同时抢红包,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙...

    littleschemer13532021-05-16
  • Java教程升级IDEA后Lombok不能使用的解决方法

    升级IDEA后Lombok不能使用的解决方法

    最近看到提示IDEA提示升级,寻思已经有好久没有升过级了。升级完毕重启之后,突然发现好多错误,本文就来介绍一下如何解决,感兴趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java BufferWriter写文件写不进去或缺失数据的解决

    Java BufferWriter写文件写不进去或缺失数据的解决

    这篇文章主要介绍了Java BufferWriter写文件写不进去或缺失数据的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望...

    spcoder14552021-10-18
  • Java教程小米推送Java代码

    小米推送Java代码

    今天小编就为大家分享一篇关于小米推送Java代码,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...

    富贵稳中求8032021-07-12
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    这篇文章主要介绍了Java使用SAX解析xml的示例,帮助大家更好的理解和学习使用Java,感兴趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程Java8中Stream使用的一个注意事项

    Java8中Stream使用的一个注意事项

    最近在工作中发现了对于集合操作转换的神器,java8新特性 stream,但在使用中遇到了一个非常重要的注意点,所以这篇文章主要给大家介绍了关于Java8中S...

    阿杜7482021-02-04
  • Java教程xml与Java对象的转换详解

    xml与Java对象的转换详解

    这篇文章主要介绍了xml与Java对象的转换详解的相关资料,需要的朋友可以参考下...

    Java教程网2942020-09-17