SpringCloudAlibaba中使用Sentinel实现熔断降级之熔断策略详解_熔断保护策略-程序员宅基地

技术标签: spring  微服务  java  微服务架构  

场景

SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解:

SpringCloudAlibaba中使用Sentinel实现流量控制以及流控规则详解_霸道流氓气质的博客-程序员宅基地

在上面使用Sentinel实现流量控制的基础上,怎样进行熔断降级。

官网文档说明

https://github.com/alibaba/Sentinel/wiki/%E7%86%94%E6%96%AD%E9%99%8D%E7%BA%A7

除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务本身也变得不可用。

现代微服务架构都是分布式的,由非常多的服务组成。不同服务之间相互调用,组成复杂的调用链路。以上的问题在链路调用中会产生放大的效果。复杂链路上的某一环不稳定,就可能会层层级联,最终导致整个链路都不可用。因此我们需要对不稳定的弱依赖服务调用进行熔断降级,暂时切断不稳定调用,避免局部不稳定因素导致整体的雪崩。熔断降级作为保护自身的手段,通常在客户端(调用端)进行配置。

注意

注意官方版本说明,此时的版本为1.8.4

 

降级策略

1、慢调用比例 (SLOW_REQUEST_RATIO):

选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。


2、异常比例 (ERROR_RATIO):

当单位统计时长(statIntervalMs)内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0],代表 0% - 100%。


3、异常数 (ERROR_COUNT):

当单位统计时长内的异常数目超过阈值之后会自动进行熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

参考Hystrix实现熔断降级

SpringCloud中集成Hystrix实现服务降级(从实例入手):

SpringCloud中集成Hystrix实现服务降级(从实例入手)_霸道流氓气质的博客-程序员宅基地

SpringCloud中集成Hystrix实现熔断(从实例入手):

SpringCloud中集成Hystrix实现熔断(从实例入手)_霸道流氓气质的博客-程序员宅基地

注:

博客:
霸道流氓气质的博客_程序员宅基地-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、熔断策略-慢调用比例

参考上面集成Sentinel实现流量控制的基础上,添加测试接口

    @GetMapping("/testD")
    public String testD()
    {
        try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); }
        log.info("testD 测试RT");
        return "------testD";
    }

使接口等待一秒之后返回。

然后新建熔断规则,配置参数如下

 

熔断降级规则说明

熔断降级规则(DegradeRule)包含下面几个重要的属性:

Field 说明 默认值
resource 资源名,即规则的作用对象 
grade 熔断策略,支持慢调用比例/异常比例/异常数策略 慢调用比例
count 慢调用比例模式下为慢调用临界 RT(超出该值计为慢调用);异常比例/异常数模式下为对应的阈值 
timeWindow 熔断时长,单位为 s 
minRequestAmount 熔断触发的最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入) 5
statIntervalMs 统计时长(单位为 ms),如 60*1000 代表分钟级(1.8.0 引入) 1000 ms
slowRatioThreshold 慢调用比例阈值,仅慢调用比例模式有效(1.8.0 引入) 
熔断器事件监听

具体可以参考其官网

 

所以这里配置的规则的含义是:

如果一秒内持续进入大于等于5个请求,并且请求响应的时间大于200毫秒的请求即为慢调用,当慢调用的比例大于0.2时就会触发降级,直到3秒后新的请求响应时间小于200毫秒才结束熔断。

使用jmeter进行压力模拟测试可以参考如下

Jmeter进行http接口压力测试:

Jmeter进行http接口压力测试_霸道流氓气质的博客-程序员宅基地

这里模拟10个线程一秒一次的发起请求并持续进行。

 

启动jmeter压力测试之后再访问testD接口

 

2、熔断策略-异常比例

修改上面的testD接口,让其出现异常

    @GetMapping("/testD")
    public String testD()
    {
        log.info("testD 异常比例");
        int age = 10/0;
        return "------testD";
    }

此时直接访问该接口,没有触发熔断降级之前会直接报错

 

修改上面的熔断策略如下

 

此规则的含义为:

如果1秒内持续进入大于等于5个请求,并且请求中异常的比例大于0.2,则触发降级,降级时间持续3秒,3秒后,如果不再异常,才结束熔断。

效果

 

3、熔断降级策略-异常数

修改上面的规则如下

 

上面配置的含义是:

如果1秒内持续进入大于等于5个请求,并且请求发生异常数超过4时,会触发熔断降级持续2秒。

效果

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/125224590

智能推荐

linux免密登录报错 Bad owner or permissions on /etc/ssh/ssh_config.d/05-redhat.conf-程序员宅基地

文章浏览阅读1.3k次。问题:权限不对的。_bad owner or permissions

CleanMyMac(mac清理工具)2024中文永久破解版下载-程序员宅基地

文章浏览阅读411次,点赞8次,收藏3次。对于使用macOS系统的用户来说,长时间的使用会不可避免地产生一定量的系统垃圾,这些垃圾文件包括但不限于应用缓存、系统日志文件、用户日志文件、残留的应用支持文件等。Mac怎么清理系统垃圾,通过上述方法,用户可以有效清理macOS系统中的垃圾文件,释放硬盘空间,提高系统性能。除了手动清理,市面上也有许多专门为macOS设计的第三方清理工具,在众多清理工具中,CleanMyMac X是比较受用户欢迎的。清理垃圾文件是保持系统性能的重要步骤,用户应养成定期清理系统垃圾的习惯。点击“系统垃圾”,开始扫描。

CSS设置字体大小、字体粗细、字体风格-程序员宅基地

文章浏览阅读2.5w次,点赞20次,收藏126次。font-size:设置字体大小:该属性值的单位可以使用相对单位和绝对单位,推荐使用相对定位中的px。(浏览器能够识别的最小像素是12px)p{ font-size:20px;}常见尺寸单位:font-family:设置字体:如果需要设置多个字体样式,则属性值可以写多个中间用逗号隔开即可,需要知道的是浏览器会从第一个字体属性值找,直到找到自己设备有的字体显示,自己设备没有的字体,按设备默认字体显示,推荐系统默认字体。p{ font-family:"微软雅黑",Arial;}_css设置字体大小

SonarQube+SonarScanner搭建_java项目需要安装sonar scanner-程序员宅基地

文章浏览阅读1k次。SonarQube+SonarScanner搭建_java项目需要安装sonar scanner

『树上24题系列』CF1085D Minimum Diameter Tree-程序员宅基地

文章浏览阅读185次。Problem\mathrm{Problem}ProblemYou are given a tree (an undirected connected graph without cycles) and an integer sss .Vanya wants to put weights on all edges of the tree so that all weights are non-negative real numbers and their sum is sss . At the same_cf1085d

【vue实战项目】通用管理系统:api封装、404页_404页面前端代码-程序员宅基地

文章浏览阅读1.1w次,点赞90次,收藏287次。vue实战小项目系列,一个前端项目从0到1的保姆级教学。很适合后端或者才入门的同学看!_404页面前端代码

随便推点

ethtool 读到的状态与 dpdk 读到的网卡状态不一致_ethtool_ops-程序员宅基地

文章浏览阅读2.7k次。ethtool 读到的链接状态使用 ethtool 读取网卡链接状态的一个示例如下:longyu@longyu-pc:~$ sudo /sbin/ethtool ens37 [sudo] password for longyu: Settings for ens37: Supported ports: [ TP ] Supported link modes: 10baseT/Hal..._ethtool_ops

接口响应慢处理总结(Java)_java接口响应慢的解决思路-程序员宅基地

文章浏览阅读5.1k次,点赞4次,收藏13次。这种情况,很可能是其它系统响应速度慢造成。接口中如果涉及外对象,一定要在日志中记录好1)请求地址;4)发起请求前后的时间(日志框架会在记录请求和响应报文时,自动记录时间)这种情况比较少,一般对大对象进行排序、多重循环等操作容易造成明显的速度下降。代码中如果有双重或多重循环,开发人员应引起足够重视。sql查询语句如果涉及的表数据量比较大,或者关联表较多,比较复杂,都需特别注重性能测试。当时把sql摘出来在数据库工具中执行秒出,上了生产环境后要1分半。尽量避免在代码中循环调用sql。_java接口响应慢的解决思路

ORACLE OEM_oemm oracle-程序员宅基地

文章浏览阅读9.1k次。OracleEnterpriseManager(Oracle企业管理器,简称OEM)是通过一组Oracle程序,为管理分布式环境提供了管理服务。OEM包括了一组DBA工具,一个repository,以及一个图形化显示的控制台。OEM控制台与每一个服务器上的智能化**(IntelligentAgent)相对应。  智能化**能够监控系统的特定事件并且执行任务(作业)就象你在系统本地一样。事件和作业的_oemm oracle

全球首例:肾衰7年的他移植了一颗猪肾脏-程序员宅基地

文章浏览阅读357次,点赞3次,收藏7次。随着血液的流通,移植的猪肾开始呈现健康的粉红色,并履行其功能,产生尿液。这一成功的瞬间,手术室内的15名移植专家目睹了这一令人赞叹的景象,并在周四的新闻发布会上由Kawai博士宣布了这一喜讯,他们以热烈的掌声庆祝了这一成就,这不仅标志着手术的胜利完成,也展示了医学领域在治疗重大疾病上取得的重大进展。在麻省总医院,一支专业的医疗团队正在进行一项关键的手术操作:将一颗经过多次基因编辑的猪肾逐步植入病人Slayman的循环系统内,这一过程由于患者自身存在的疾病而显得尤为复杂,因为其血管条件并不理想。

Lnton羚通视频分析算法平台烟雾火焰检测识别 智能识别烟雾火焰检测系统-程序员宅基地

文章浏览阅读46次。此外,云平台还提供丰富的算法库和工具,支持用户上传和部署自己的算法模型,以满足不同用户的需求。烟火识别系统基于智能视频分析技术,能够识别监控区域内的烟雾和火焰,并进行动态识别,包括烟雾和火焰的状态转换,例如从有到无、从小到大、从大到小、从小烟到浓烟。它能够实时分析并报警,不依赖其他传感设备,直接对监控区域内的烟雾和火焰进行准确识别,并及时将报警信息推送给相关的管理和安全人员,以便及时应对和处理。此外,平台还提供丰富的算法库和工具,并支持用户上传和部署自定义算法,提升了平台的灵活性和个性化能力。

无涯教程-toPrecision()函数_toprecision函数-程序员宅基地

文章浏览阅读245次,点赞5次,收藏8次。此方法返回表示数字对象的字符串,达到指定的精度(precision)。_toprecision函数

推荐文章

热门文章

相关标签