springcloud Alibaba——Sentinel热点key限流

Sentinel热点key限流

是什么

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

  • 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
  • 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。
热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

兜底的方法:

  • 系统默认的方法
  • 客户自定义的方法
    之前的case,限流出问题后,都是用sentinel系统默认的提示:Blocked by Sentinel (flow limiting)

那么我们能不能自定?类似Hystrix,某个方法出问题了,就找对应的兜底降级方法?

从HystrixCommond到@SentinelResource

Sentinel热点参数限流
在这里插入图片描述
Controller层示例代码:

//热点限流
    @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";
    } 

如果失败用deal_testHotKey这个方法来兜底。

配置:索引为第0个的参数(p1)阈值为1
限流模式仅支持QPS模式在这里插入图片描述
方法testHotKey里面第一个参数只要QPS超过每秒1次,拿上降级处理。
携带p1参数快速多次访问:
在这里插入图片描述
超过1秒一次的限制,触发blockHandler方法。

携带p2参数快速访问多次:
在这里插入图片描述
一切正常。

同时携带p1和p2参数快速访问:
在这里插入图片描述
触发blockHandler方法。

参数例外项

在这里插入图片描述
上述案例在访问超过1秒1个后马上被限流。但是,我们希望p1参数当它时某个特殊值时,它的限流值和平时不一样。
比如:当p1=5时,它的阈值可以达到200;其它值仍然为1

举个例子,当一个数小于5的时候对他进行限制,如果大于5的时候不对他进行限制。就是这个意思。

配置如下:
在这里插入图片描述
说明:上面的不用解释,下面的参数例外项
其中的参数类型包含8种基本数据类型和String类型
当上面设置的0号参数的值达到5时,他的QPS值可以达到200。

测试如下:

  1. 携带p1=5快速多次访问:正常
    在这里插入图片描述
  2. 携带p1=3快速多次访问:触发blockHandler方法
    在这里插入图片描述
    注意:

@SentinelResource处理的是Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理;
如果逻辑代码中出现其它RuntimeException,@SentinelResource是不管的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值