11. Alibaba Sentinel 热点规则

1. 概念介绍

何为热点?热点即经常访问的数据。有时候我们某个请求路径中的某个参数更甚至于某个参数值为热点数据。

比如某个商品秒杀,或者说突然降价的热点商品数据, 或者微博中某个人的突发事件等。 这些数据在某一段时间突然暴增,可能会把系统压垮。 所以需要针对他们进行限流,不能影响其他同类。

比如:

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

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

官网介绍:parameter-flow-control

字段说明表格

字段名说明
资源名访问的资源,可以通过@SentinelResource定义
限流模式目前只支持QPS模式,每秒访问量
参数索引要进行限流的参数索引下标,从0开始
单机阈值对要限定的参数的访问次数,达到这个次数后,将限流
统计窗口时长要统计单机阈值的时长,单位:秒
统计时长触发熔断需要统计请求数的时长,单位:毫秒
高级选项<br>参数类型高级选项<br>要限流的参数类型
高级选项<br>参数值高级选项<br>当参数为某个值的时候,才生效后面的限流阈值参数
高级选项<br>限流阈值高级选项<br>单独限定的某个参数的限流阈值

2. @SentinelResource注解

因为热点限流是更加细粒度的限流规则,如果想使用它就必须要配合对应SentinelResource注解,来使用

Sentinel 提供了 @SentinelResource 注解用于定义资源,它有很多的参数,我们这里主要关注两个参数:

  1. value:代表资源名称,必需项,因为需要通过resource name找到对应的规则,这个是必须配置的
  2. blockHandler:blockHandler 对应处理 BlockException 的方法名称,可选项,访问范围需要是 public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为 BlockException。

3. 案例讲解

@SentinelResource(value="xxx")

那现在我们要完成以上图中的效果,这个时候我们首先要编写代码,在FlowLimitController中编写代码

@GetMapping("/testHotKey")
@SentinelResource("testHotKey")
public String testB(String hot1, String hot2, String hot3) {
    return "-----testHotKey - ";
}

然后再来配置热点规则

上面的配置表示访问资源testHotKey时, 参数索引为0 也就是hot1 这个参数是,限定在1秒(统计窗口时长)内只能访问1次(单机阈值),新增规则访问测试

访问测试

可以看到被限流了,但是返回的是服务内部错误,显示并不友好

@SentinelResource的blockHandler参数

刚才的演示中,我们明显发现这种限流方法的提示效果非常不友好,所以如果我们需要能够得到友好的提示,我们就需要使用@SentinelResource注解提供的另外一个参数blockHandler,这个参数是可以指定当出现异常时的处理方法,具体操作如下:

@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey", blockHandler = "blockHandler")
public String testB(String hot1, String hot2, String hot3) {
    return "-----testHotKey - ";
}

//处理异常方法,方法签名要和对应的接口方法保持一致
public String blockHandler(String hot1, String hot2, String hot3, BlockException exception) {
    return "系统繁忙稍后重试。。";
}

然后再次访问,返回结果就是指定的返回结果了

4. 高级选项(例外参数项)

实参数例外项就是可以达到更加细粒度的控制,比如我们当前的例子中,目前hot1参数在访问时超过阈值就会被限流,但是我们可以通过参数例外项设置hot1具体等于特殊的某个值的时候,触发不同的限流效果。假如hot1的值等于5时,它的阈值可以达到200。

使用场景1: 某个名人的博客,单独限流

使用场景2: 某个比较火的商品突然降价

编辑热点规则

以上规则表示,访问testHotKey资源时,参数hot1=1时的限流为1 ,其他参数的限流阈值为1000,这就好比给某个商品单独限流

访问效果

可以看出访问参数 hot1=1的时候被限流了, 访问hot1=5时由于QPS没有到达1000所以正常访问

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值