前言
我们已经对单机限流和集群限流有过一定了解了,但是他们都是针对一些固定的资源进行流控的,在实际的应用场景中我们可能会遇到各种复杂的情况,不可能通过固定的资源来进行限流。
比如我们想要对一段时间内频繁访问的用户 ID 进行限制,又或者我们想统计一段时间内最常购买的商品 ID 并针对商品 ID 进行限制。那这里的用户 ID 和商品 ID 都是可变的资源,通过原先的固定资源已经无法满足我们的需求了,这时我们就可以通过 Sentinel 为我们提供的 热点参数限流 来达到这样的效果
内容
参考:https://www.jianshu.com/p/2efe5058fcf4
1.什么是热点(参数)?
- 首先我们需要知道什么是热点,热点就是访问非常频繁的参数
- 例如我们大家都知道的爬虫,就是通过脚本去爬取其他网站的数据,一般防爬虫的常用方法之一就是限制爬虫的 IP,那对应到这里 IP 就是一种热点的参数。
那么 Sentinel 是怎么知道哪些参数是热点,哪些参数不是热点的呢?Sentinel 利用 LRU 策略,结合底层的滑动窗口机制来实现热点参数统计。LRU 策略可以统计单位时间内,最近最常访问的热点参数,而滑动窗口机制可以帮助统计每个参数的 qps。
说简单点就是,Sentinel 会先检查出提交过来的参数,哪些是热点的参数,然后在应用热点参数的限流规则,将qps 超过设定阈值的请求给 block 掉,整个过程如下图所示:
如果参数携带:axb;他的qps大于5,会被阻塞掉
2.实战
- 1.我们创建一个ParamController
|
|
- 2.访问
curl http://127.0.0.1:18080/param
然后打开sentinel,我们发现在param下面挂载了一个param资源,此时我们点进去:
设置热线限流(全部限制):
- 3.测试访问

注意热线限流不支持接口资源,一定是带有@SentinelResource注解的资源