Spring Cloud Alibaba:Sentinel 热点参数限流

1. 前言

Sentinel版本:1.8.0

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

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

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

Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。

2. 热点规则配置

在这里插入图片描述

  • 参数索引:接口参数的位置,从0开始
  • 单机阈值:统计窗口时长内,相同参数最多允许的次数

写个接口测试:

	@SentinelResource(value = "order1")
    @GetMapping("/order1")
    public String order1(String name, Integer age) throws Exception {
    
    
        return name + "," + age;
    }

流控规则:order1 这个接口的name参数值,在10秒内只能传递一次

  • 打开浏览器,访问 http://localhost:8020/order1?name=fuhb
    在这里插入图片描述
  • 这时把name参数换个值,访问 http://localhost:8020/order1?name=zhangsan&age=10,结果正常
    在这里插入图片描述
  • 但是,只要在10秒内,name参数再次传递fuhb或者zhangsan,就会被熔断
    在这里插入图片描述
  • 这就是热点参数限流的作用

3. 参数例外项

上面的例子,参数在10秒内重复传值都会被限流。

假设现在有个需求:当name=fuhb的时候,QPS允许达到5,其他情况下QPS仍然保持1。这时就需要配置参数例外项。

扫描二维码关注公众号,回复: 12656426 查看本文章

如下图,应该很一目了然:

在这里插入图片描述
这时,我们反复访问 http://localhost:8020/order1?name=fuhb&age=10 接口,只要10秒内不超过5次,就不会被熔断。

猜你喜欢

转载自blog.csdn.net/qq_28834355/article/details/113354180