SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

前言

本篇文章主要介绍 Sentinel 的热点限流规则,希望观众老爷们多多支持,并在评论区批评指正!

热点规则

我们通过 Sentinel 的流控规则,可以对请求或者具体的方法进行流控。如果要对请求的的参数进行流控,那么可以使用 Sentinel 提供的热点规则。

下面进行演示:


比如某一时刻,请求携带不同参数的访问频率是不一样的:

  • http://localhost:8301/test1?a=10  请求100次
  • http://localhost:8301/test1?b=10  请求0次
  • http://localhost:8301/test1?c=10  请求3次

由于携带参数 a 的请求比较多,我们就可以对携带参数 a 的请求进行限流。

注意:对热点参数的限流,只能是 QPS 模式,且为直接的、快速失败模式。

  1. 首先我们需要创建一个测试请求映射:
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用
  1. 先发送一次请求,然后进行对 /test1 进行热点参数限流,对 a 参数进行限流。
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

参数索引,表示请求参数的索引,从 0 开始。

那么我们对 a 参数进行限流并设置单击阈值为 1,统计窗口时长为 1s 。也就是 1s 内的请求不能超过一次。

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用
  1. 然后进行发送携带参数 a 的请求进行测试:
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

我们发现热点参数限流规则并没有生效,这是为什么呢?我们必须为相应的请求方法上标注 @SentinelResource 注解才可以生效,可能是因为热点参数限流是更细粒度的限流,需要耗费更多的资源,需要标注 @SentinelResource 注解,让 Sentinel 去主动解析请求方法的参数而不是所有请求都进行解析。

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

然后重启我们的服务并重新进行热点限流规则的设置,然后进行测试:

「注意」:此时的热点规则应设置在 test1 上而不是 /test1 ,否则不会生效。

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

可以发现设置热点限流之后,进行测试返回的是错误信息,抛出异常 ParamFlexException

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用
  1. 测试不携带参数 a 进行请求
SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

我们发现不携带任何参数和不携带 a 参数携带其他参数,仍然会报错,这是怎么回事呢?

原来我们在定义请求方法的时候,设置了参数的默认值,那么不管我们发送请求时,携不携带这些参数,都会有 a 这个参数,这是 SpringMVC 的机制。这也说明了 sentinel 热点限流监控的是具体的方法,而不是请求,所以需要标注 @SentinelResource 注解。

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

那么我们将 a b c 请求参数,设置为非必须,再进行测试:(注意对 test1重新设置限流规则)

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

我们发现只要携带了参数 a 就会启用我们的限流规则,而无关参数的顺序,这也证明了 sentinel 热点参数限流针对的是标注 @SentinelResource 注解的方法。

我们注意到在我们设置好热点限流规则后,点击编辑该热点规则的时候,会出现高级选项,这提供了一种扩展,我们可以对参数的指定值单独设定阈值进行限流,而不是对参数的任何值都进行限流,提供精准打击。

比如我们现在不仅希望对参数a限流,而且还希望当参数a的值为10时,QPS达到5再进行限流,那么就可以设定参数例外项:

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

点击添加后,这里我们使用 apifox 进行测试,因为连续 5次点击出现异常难以捕捉。

SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

我们可以发现在连续请求 6 次时,第 6 次请求进行了限流

原文始发于微信公众号(yanghi):SpringCloud Alibaba微服务之Sentinel热点限流规则的使用

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/226537.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!