Spring Cloud Alibaba——Sentinel熔断降级

官方说明

先附上Sentinel官网地址,来看看官方是如何说的

在这里插入图片描述

在这里插入图片描述
以上便是官网的说明及为什么要使用熔断降级。理解了之后,我们就来讨论下熔断策略

熔断策略

Sentinel 提供以下几种熔断策略:

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

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

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

测试

慢调用比例

或许有的小伙伴对新版本中的慢调用比例策略不理解,我们结合测试来慢慢分析它。我们在源项目的controller层新添加了代码如下
在这里插入图片描述
若不熟悉的小伙伴可以去看之前的sentinel文章,或者简单理解,就是新添加了一个"/testD"访问路径,在浏览器输入http://ip地址:端口号/testD,页面显示"---------testD".
接下来我们在sentinel平台为资源/testD添加熔断规则如图:
在这里插入图片描述
这里还需给大家看一个图

在这里插入图片描述
结合两张图以及官方对慢调用比例的说明我们来分析到底是什么意思
首先我们规定的是最大RT为200ms,即最大的响应时间。正常情况下,
若每次请求/testD,它的处理时间都在200ms以下,则属于正常请求资源。此时我们在代码中使testD睡眠一秒(假装它不稳定),如图:
在这里插入图片描述
这个时候当我们再去请求/testD时,请求的响应时间已经大于最大RT了。此时,超过最大RT的请求则记为慢调用,而当单位统计时长内(我们设置的为1s)请求数目大于设置的最小请求数目(我们设置的为5),并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。什么是慢调用的比例大于阈值?当我们出现超过最大RT的请求,它则记为慢调用,若接下来有10个请求,并且10个请求中有5个以上响应时间都超过了最大RT,则慢调用数量占比是不是就大于了我们设置的比例阈值(我们设置的为0.5)呢?是不是忽然就理解了,此时,两个条件我们都已满足(①请求数目大于设置的最小请求数目,②慢调用的比例大于阈值),则接下来的熔断时长内(我们设置为1s)请求会自动被熔断,自动被熔断的意思就是此时后台此资源不服务,你无法请求它,明确告诉你结果,别等了,我暂时不工作。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。理解了之后,我们用Jmeter来测试一下,看看它的结果如何如图:

创建线程组,每秒中有10个请求去请求/testD资源,很显然它会使请求自动熔断,接下来运行该线程组。

在这里插入图片描述
我们此时用浏览器去访问该资源,出现如下情况
在这里插入图片描述
当我们停掉线程组,1s过后,再次去访问
在这里插入图片描述
该服务又成功活了过来,嘿嘿嘿!!!

异常比例

有了上面的讲解之后,异常比例也就容易理解多了,结合官方的说明,我就直接又复制过来,省的你们往上翻
在这里插入图片描述
代码修改模拟异常:
在这里插入图片描述

我们直接上配置
在这里插入图片描述
这下不需要一一解释了吧,直接开启Jmeter进行测试,
在这里插入图片描述
由于此时次次都是异常,明显异常数的比例大于我们设定的0.2,并且请求数量也大于我们设定的5,所以必定触发熔断。
在这里插入图片描述
果然,结果符合我们的期待。
当我们停下Jmeter测试之后,经过熔断时长1s后,再去访问此资源,页面也就报错了如图
在这里插入图片描述

异常数

官方:
在这里插入图片描述
配置:
在这里插入图片描述
代码:
在这里插入图片描述
当统计时长内(60000ms=1min),一旦超过5次异常,则直接熔断,我们只需多刷新几次即可,如图:
在这里插入图片描述
经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。

Tip

本文章针对 Sentinel 1.8.0 及以上版本。1.8.0 版本对熔断降级特性进行了全新的改进升级,请使用最新版本以更好地利用熔断降级的能力。个人参照官网理解,若哪里有错,感谢指正!!!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Alibaba Sentinel是一个基于Java的开源框架,提供了熔断降级、限流、系统负载保护等功能,可以帮助开发者实现微服务架构中的高可用性和稳定性。下面是一个使用Spring Cloud Alibaba Sentinel实现熔断与限流的项目介绍。 1. 创建Spring Boot项目 首先,需要创建一个Spring Boot项目,并添加Spring Cloud Alibaba Sentinel的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 2. 配置Sentinel Dashboard Sentinel Dashboard是Sentinel的可视化管理平台,可以通过它来查看应用程序的运行状况、配置规则等。需要在项目中添加Sentinel Dashboard的依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel-datasource-nacos</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-sentinel-dashboard</artifactId> <version>2.1.1.RELEASE</version> </dependency> ``` 同时,在application.properties文件中添加以下配置: ```properties # Sentinel Dashboard配置 spring.cloud.sentinel.transport.dashboard=localhost:8080 # Nacos配置 spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.namespace= spring.cloud.nacos.discovery.username= spring.cloud.nacos.discovery.password= ``` 启动项目后,访问http://localhost:8080即可进入Sentinel Dashboard界面。 3. 实现熔断与限流 在项目中可以通过注解方式实现熔断与限流功能。例如,在Controller类中添加以下代码: ```java @RestController public class HelloController { @GetMapping("/hello") @SentinelResource(value = "hello", fallback = "fallback") public String hello(@RequestParam(required = false) String name) { if(StringUtils.isEmpty(name)) { throw new IllegalArgumentException("name is empty"); } return "Hello, " + name; } public String fallback(String name) { return "fallback " + name; } } ``` @SentinelResource注解指定了资源名称为hello,同时指定了fallback方法用于处理熔断降级。可以通过Sentinel Dashboard配置熔断规则和流量控制规则。 以上就是使用Spring Cloud Alibaba Sentinel实现熔断与限流的项目介绍。使用Sentinel可以帮助我们更好地保障应用程序的稳定性和可用性,避免因为异常情况导致系统崩溃。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值