美文网首页
Sentinel热点规则

Sentinel热点规则

作者: 裂开的汤圆 | 来源:发表于2023-02-08 23:13 被阅读0次

官方文档

https://github.com/alibaba/Sentinel/wiki/%E7%83%AD%E7%82%B9%E5%8F%82%E6%95%B0%E9%99%90%E6%B5%81

什么是热点规则

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

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

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

image.png

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

配置实现

controller

    /**
     * 使用@SentinelResource标签开启热点参数限流功能
     * @SentinelResource(value)对应Sentinel控制台-热点规则-资源名
     * @SentinelResource(blockHandeler)指定热点限流生效后的处理函数
     */
    @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){
        // sentinel默认的提示为:Blocked by Sentinel(flow limiting),这里可以自定义修改
        return "-------------------- 自定义返回内容 --------------------------";
    }

Sentinel控制台-热点规则-新增热点规则
这里需要注意,当指定参数索引为0时,指定的是/testHostKey接口的第一个参数P1,即该热点参数限流规则只针对参数p1生效。
例如http://localhost:8005/testHotKey?p2=haha并不会触发该热点限流规则
只有当参数中存在p1时才会触发该热点限流规则,例如http://localhost:8005/testHotKey?p1=haha

image.png

上图中热点限流的规则为,当资源testHostKey第1个参数的QPS超过1时,将进行限流操作,返回结果如下

image.png

参数例外项

image.png

上图配置的意思为,当资源testHotKey第一个参数QPS超过1时,会触发限流,但是有一个例外情况就是,当第一个参数的值为5时限流的阈值为200而不是1,这里可以配置多个参数例外项。

相关文章

网友评论

      本文标题:Sentinel热点规则

      本文链接:https://www.haomeiwen.com/subject/cdwmvktx.html