sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则

sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第1张图片
默认是直接模式,直接模式的单机阈值是做用到资源名上的。也就是/testA。
但如果是关联模式。单机阈值是做用到关联资源上的。也就是/testB。
也就是说qps1是做用到/testB上。
关联模式就是当关联资源超出阈值时。也就是qps超过1时。资源名会被禁止访问。

可以验证一下。
利用Postman发送一20个请求,每隔0.3秒。也就是大概每秒发送3个请求。也就是qps=3

sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第2张图片

sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第3张图片
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第4张图片
点击run。这时/testB做为关联资源超出我们之前设置的qps=1的阈值。/testA也就被禁止访问了。

sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第5张图片

排队等待
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第6张图片

超过这个阈值的请求,不会被直接禁止访问,直接禁止访问的是快速失败,排队等待的是请求会排队处理,在你这个阈值的上限上。
用postman发一个请求,小于1秒一次。
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第7张图片

观察控制台可以看到,而服务线程依旧是以最高的设置阈值qps=1,1秒一次来处理请求的。有点像消息队列。
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第8张图片

降级策略
1。RT
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第9张图片
RT图示
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第10张图片
简单来说就是,当qps>5时,平均请求响应时间>RT值时,图示的是200 ms,也就是平均请求响应时间大于200ms时,这时,触发降级,也就是断路器打开了,熔断了。此时资源在时间窗口的时间内不允许访问,图示的时间窗口值是1也就是1s内不允许访问,这时访问会报错。也就是熔断了。要等1s后才可以访问。

2。异常比例
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第11张图片

图示
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第12张图片
上面这个例子的意思是,/testD这个资源,错误比例大于20%这个资源就会报错,在一秒的窗口期内不允许访问.
代码故意弄错

 @GetMapping("/testD")
    public String testD() {
//        try {
//            Thread.sleep(1000);
//        } catch (InterruptedException e) {
//            e.printStackTrace();
//        }
//        log.info("testD 测试RT");

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

在浏览器在使劲刷新,超过qps=5,又因异常100%超过了设置的异常20%,就会看到以下报错.
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第13张图片

热点规则
图示
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第14张图片
简单来说就是,对资源的参数进行qps限流qps=1。参数索引就是,参数的顺序.这里是零就是资源的第一个参数.也就是对p1参数进行限流,p2不限流,可以随便访问.
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第15张图片


    @GetMapping("/testHotKey")
    @SentinelResource(value = "testHotKey",blockHandler = "deal_testHotKey")
    public String testHotKey(@RequestParam(value = "p1",required = false) String p1,
                             @RequestParam(value = "p2",required = false) String p2){
        return "----testHotKey";
    }
	//报错方法
    public String deal_testHotKey(String p1, String p2, BlockException exception){
        return "----deal_testHotKey,))))))";
    }

疯狂刷新报错
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第16张图片

热点规则高级选项
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第17张图片

也就是p1参数为5的时候,阈值为100,高级选项能指定参数的特定值设置一个不同的阈值.

刷新测试
sentinal 流控规则 关联模式 流控效果 排队等待 降级策略 热点规则_第18张图片

你可能感兴趣的:(java)