Sentinel的熔断降级

整个项目请看gitee:https://gitee.com/xwb1056481167/spring-cloud

sentinel的安装和项目集成:https://blog.csdn.net/www1056481167/article/details/113679945

jmeter下载地址https://archive.apache.org/dist/jmeter/source/#sig(模拟并发使用)

注:里面用到的接口在微服务cloudalibaba-sentinel-service8401

  • RT(平均响应时间)

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

  • 异常比例

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

  • 异常数

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

慢调用比例 (SLOW_REQUEST_RATIO)

平均响应时间 ,超出阈值 且 在时间窗口内通过的请求数>=5,两个条件同时满足触发降级

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

RT配置(平均响应时间)

平均响应时长

永远一秒钟执行10个线程数(大于5个),希望200毫秒执行完,如果超过200毫秒,断路器打开(保险丝跳闸)服务不可用,保险丝跳闸断电了

异常比例 (ERROR_RATIO)

QPS>=5,且异常比例(秒级统计)超过阈值时,触发降级,时间窗口结束后,关闭降级 

1、新增测试类

@GetMapping("/testC")
public String testC() {
    int a = 10 / 0;
    return "-----------testC";
}

2、设置异常比例

设置含义:一秒访问量10次(符合官网规定的一秒访问量超过5),然后这些访问失败的比例如果超过30%,则服务降级。 进入testC方法后,全部都是失败的,接下来的5秒内访问进行服务都是熔断的,5秒过后回复正常访问。就这样一直重复。

如果关闭jmeter,则关闭了测试,刷新浏览器,此时不会走设定的异常比例(因为QPS的访问量不够5)则会系统的异常。走runtimeException

异常数 (ERROR_COUNT)

SentinelResource和Hystrix的HystrixCommand注解是一样的效果,是有alibaba的增强版。
异常数(分钟统计)超过阈值,触发降级,时间窗口结束后,关闭降级

 1、测试类

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

2、sentinel配置

说明:一分钟之内,访问testE接口,刚开始的时候报错,连续访问5次后,跳闸,服务被熔断,紧接着被降级不能访问

猜你喜欢

转载自blog.csdn.net/www1056481167/article/details/113683673