Sentinel热点规则分析

Sentinel热点规则分析,第1张

Sentinel热点规则分析

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

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

热点参数限流会统计传入参数中的热点数据,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。其中,Sentinel会利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。

@GetMapping("/consumer/doFindById/{id}")
@SentinelResource("dofindById")//不设定这个注解,热点规则不生效
public String doFindById(@PathVariable Integer id) {
    return "hot id is"+id;
}

浏览器输入:localhost:8090/consumer/doFindById/100

或者:
@GetMapping("/consumer/doFindById")
@SentinelResource("doFindById")
public String doFindById(@RequestParam("id") Integer id){
    return "hot id is "+id;
}
浏览器输入:localhost:8090/consumer/doFindById/?id=100

服务启动后,选择要限流的热点链路,如图所示:

设置要限流的热点,如图所示:

热点规则的限流模式只有QPS模式(这才叫热点)。参数索引为@SentinelResource注解的方法参数下标,0代表第一个参数,1代表第二个参数。单机阈值以及统计窗口时长表示在此窗口时间超过阈值就限流。

多次访问热点参数方法,前端会出现如下界面,如图所示:

 

然后,在后台出现如下异常表示限流成功。

com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException: 2

其中,热点参数其实说白了就是特殊的流控,流控设置是针对整个请求的;但是热点参数他可以设置到具体哪个参数,甚至参数针对的值,这样更灵活的进行流控管理。

一般应用在某些特殊资源的特殊处理,如:某些商品流量大,其他商品流量很正常,就可以利用热点参数限流的方案。

配置参数例外项,如图所示:

这里表示参数值为5时阈值为100,其它参数值阈值为1,例如当我们访问http://ip:port/consumer/doRestEcho?id=5时的限流阈值为100。

总结:

  • 如何理解热点数据?(访问频度比较高的数据,某些商品、谋篇文章、某个视频)
  • 热点数据的限流规则是怎样的?(主要是针对参数进行限流设计)
  • 热点数据中的特殊参数如何理解?(热点限流中的某个参数值的阈值设计)
  • 对于热点数据的访问出现限流以后底层异常是什么?(ParamFlowException)

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/4657474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存