SpringCloud Alibaba Sentinel三种服务降级策略,以及热点key降级

熔断降级

1, 降级-RT(平均响应时间)
降级要求:每秒钟请求数大于5个,且每个请求要在0.2秒内处理完。
在这里插入图片描述
后端代码:进行睡眠1秒钟
在这里插入图片描述
效果:先然0.2秒内处理不了一个请求,且进行压测,每秒发送10个请求。最后导致服务降级失败

2,降级-异常比例
表示在一定时间内,请求的异常次数不能占总请求次数的比例,且每个时间窗口内的请求数要大于5次,最后在设定的时间窗口结束后,关闭降级

在这里插入图片描述
后端代码:
在这里插入图片描述
测试效果:我们手动产生异常,很明显异常率100%大于20%,且进行压测,每秒发送10个请求。最后导致服务降级失败

3,降级–异常数:
异常数和上面有所不同,其统计的时间窗口是分钟级别的,如果时间窗口内请求数异常请求数大于我们设置的5,那么就会产生降级,然后直到有个时间窗口统计到的异常数小于5才会放行在这里插入图片描述

热点Key限流

1, 设置限流规则
在这里插入图片描述

@SentinelResource注解处理的是Sentinel控制台配置的违规情况,有blockHandler指定的方法进行兜底处理,
但是它也可以配置fallback方法,像豪猪哥一样,只要方法失败,就会执行fallback指定的方法

方法一:限流方法和业务逻辑耦合在一个类中

后台代码,blockHandler = "deal_testHotKey"表示指定限流所执行的方法

@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)
    {
        //int age = 10/0;
        return "------testHotKey";
    }
    public String deal_testHotKey (String p1, String p2, BlockException exception)
    {
        return "------deal_testHotKey,o(╥﹏╥)o";  //sentinel系统默认的提示:Blocked by Sentinel (flow limiting)
    }

在这里插入图片描述

方法二:限流方法和业务逻辑分离开来

先在注解中指定限流方法所在的类,和方法名

@SentinelResource(value = "byResource", blockHandlerClass= CustomerBlockHandler.class, blockHandler = "handleException02")

在这里插入图片描述
其次,创建对应的类和方法
在这里插入图片描述

降级效果:限流只与索引为0的热点key–p1有关,当我们请求数超过热点key所设置的阈值时,就会发生降级
在这里插入图片描述

2, 配置热点key的参数例外项:

注意:热点Key限流也支持我们配置例外项,不过仅仅支持8种基本数据类型和String类型。假设配置参数值为5,类型为String,阈值为200.表示我们每秒请求200次才会产生限流

在这里插入图片描述

测试效果,当p1=5的时候,我们请求超过普通key的阈值1,也不会进行降级,因为参数例外项有自己的阈值,我这里设置的是200.因此不会降级
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值