8. Alibaba Sentinel 熔断策略之慢调用比例

1. 概念解释

熔断策略慢调用比例是以慢调用数量的比例作为阈值,首先需要设置最大 RT(即最大的响应时间,用于鉴定是否是慢调用),请求的响应时间大于该值则统计为慢调用。当单位统计时长(statIntervalMs)内请求数大于设置的最小请求数,并且慢调用的比例大于比例阈值,则接下来的请求会自动熔断,熔断时间为设置的熔断时长。经过熔断时长后熔断器会进入探测恢复状态(HALF-OPEN 状态),若在HALF-OPEN状态下有一个请求响应时间小于 最大RT 则结束熔断,否则继续熔断。

具体设置如下图:

字段说明表格

字段名说明
资源名访问的请求路径
熔断策略熔断规则配置后,进行熔断的方式策略,本文主要分析慢调用比例
最大RT最大响应时间,单位:毫秒数,用于鉴定是否是慢调用
比例阈值值的是慢调用的比例阈值,是触发熔断的其中一个条件
熔断时长当条件满足后需要进行熔断的熔断时长,单位:秒
最小请求数在统计时长的时间内,请求数要大于该值,才会判断慢调用比例是否大于比例阈值, 所以最小请求数是触发熔断的另外一个条件
统计时长触发熔断需要统计请求数的时长,单位:毫秒

帮助理解图

2. 案例演示

首先我们需要添加一个控制器,这个控制器中的调用资源方法中sleep500毫秒,方便被标记成慢调用, 同时支持不慢调用请求,isShow=false时

@GetMapping("/testA")
public String testA(boolean isSlow) {
    if(isSlow) {
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    return "-----testA - ";
}

设置熔断规则

上面的熔断规则表示说: 访问/testA资源时,如果在1000毫秒内,请求数量超过5,并且这些数量中超过300毫秒的请求数量的比例超过0.5则熔断5秒,5秒后进入半开状态,如果半开状态中有一个请求小于300毫秒,则取消熔断,否则继续熔断

3. 理论实践

为了展示效果

  1. 我们要支持在同一个资源上慢调用请求(请求响应超过300毫秒)和非慢调用请求(请求马上得到响应
    慢调用地址http://127.0.0.1:8401/testA?isSlow=true
    非慢调用地址http://127.0.0.1:8401/testA?isSlow=false
  2. 在JMeter中开启6个线程同时请求慢调用地址,并启动JMeter

  3. 这时候,/testA资源会进入一个5秒的熔断时长。 我们在这个时间内请求非慢调用地址,会被熔断

  4. 测试完以上情况后,停止JMeter,在5秒后再次请求慢调用地址,那么会继续熔断

  5. 测试完以上情况后,停止JMeter,那么会在5秒后取消熔断

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Cloud Alibaba提供了Sentinel作为熔断降级的解决方案。下面是使用Spring Cloud Alibaba进行熔断降级的步骤: 1. 添加依赖 在pom.xml中添加以下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> ``` 2. 配置Sentinel 在application.properties或application.yml中添加以下配置: ```yaml spring.cloud.sentinel.transport.dashboard=localhost:8080 spring.cloud.sentinel.datasource.ds1.nacos.server-addr=localhost:8848 spring.cloud.sentinel.datasource.ds1.nacos.dataId=${spring.application.name}-sentinel spring.cloud.sentinel.datasource.ds1.nacos.groupId=DEFAULT_GROUP ``` 其中,`spring.cloud.sentinel.transport.dashboard`为Sentinel Dashboard的地址,`spring.cloud.sentinel.datasource.ds1.nacos.server-addr`为Nacos服务的地址,`spring.cloud.sentinel.datasource.ds1.nacos.dataId`为Sentinel规则持久化在Nacos上的Data ID。 3. 编写熔断降级规则 在Sentinel Dashboard中编写熔断降级规则,例如: - 熔断规则:当QPS超过阈值时,进行熔断 - 降级规则:当服务出现异常时,进行降级处理 4. 使用@SentinelResource注解 在需要进行熔断降级的方法上使用@SentinelResource注解,例如: ```java @SentinelResource(value = "hello", fallback = "fallback") public String hello() { // ... } public String fallback() { // ... } ``` 其中,value为资源名称,fallback为降级处理的方法名。 这样,当资源名称为hello的方法发生熔断或降级时,会自动调用fallback方法进行处理。 5. 启动应用 启动应用后,可以在Sentinel Dashboard中查看实时的熔断降级信息和统计数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值