Sentinel热点参数限流动

简介: Sentinel热点参数限流动

什么是热点

限流是统计访问某个资源的所有请求,判断是否超过QPS阈值。而热点参数限流是分别统计参数值相同的请求,判断是否超过QPS阈值。  

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

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

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

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

全局参数限流

注意事项:热点参数限流对默认的SpringMVC资源无效,需要利用@SentinelResource注解标记资源

对以下资源进行热点参数限流

    @GetMapping("/getInfo/{id}")
    @SentinelResource("/hot")
    public Teacher getInfo(@PathVariable String id){
        Teacher teacher = teacherServiceFeign.getInfo(id);
        return teacher;
    }

代表的含义是:对hot这个资源的0号参数(第一个参数)做统计,每1秒相同参数值的请求数不能超过5  

当id=1的请求触发阈值被限流时,id值不为1的请求不受影响。  

热点参数限流

刚才的配置中,对查询信息这个接口的所有商品一视同仁,QPS都限定为2。而在实际开发中,可能部分id是热点id,例如秒杀商品,我们希望这部分商品的QPS限制与其它商品不一样,高一些。那就需要配置热点参数限流的高级选项了。

对以下资源进行热点参数限流:

    @GetMapping("/getInfo/{id}")
    @SentinelResource("/hot")
    public Teacher getInfo(@PathVariable String id){
        Teacher teacher = teacherServiceFeign.getInfo(id);
        return teacher;
    }

给hot这个资源添加热点参数限流,规则如下:

•默认的热点参数规则是每1秒请求量不超过3

•给1这个参数设置例外:每1秒请求量不超过2

•给2这个参数设置例外:每1秒请求量不超过1

热点参数规则

热点参数规则(ParamFlowRule)类似于流量控制规则(FlowRule):

属性 说明 默认值
resource 资源名,必填
count 限流阈值,必填
grade 限流模式 QPS 模式
durationInSec 统计窗口时间长度(单位为秒),1.6.0 版本开始支持 1s
controlBehavior 流控效果(支持快速失败和匀速排队模式),1.6.0 版本开始支持 快速失败
maxQueueingTimeMs 最大排队等待时长(仅在匀速排队模式生效),1.6.0 版本开始支持 0ms
paramIdx 热点参数的索引,必填,对应 SphU.entry(xxx, args) 中的参数索引位置
paramFlowItemList 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前面 count 阈值的限制。仅支持基本类型和字符串类型
clusterMode 是否是集群参数流控规则 false
clusterConfig 集群流控相关配置

我们可以通过 ParamFlowRuleManagerloadRules 方法更新热点参数规则,下面是一个示例:

ParamFlowRule rule = new ParamFlowRule(resourceName)
    .setParamIdx(0)
    .setCount(5);
// 针对 int 类型的参数 PARAM_B,单独设置限流 QPS 阈值为 10,而不是全局的阈值 5.
ParamFlowItem item = new ParamFlowItem().setObject(String.valueOf(PARAM_B))
    .setClassType(int.class.getName())
    .setCount(10);
rule.setParamFlowItemList(Collections.singletonList(item));
ParamFlowRuleManager.loadRules(Collections.singletonList(rule));


相关文章
|
SpringCloudAlibaba 监控 Dubbo
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
SpringCloudAlibaba篇(三)整合Sentinel(限流、流量整形、熔断降级、系统负载保护、热点防护,分布式服务架构的高可用流量防护组件)
|
1月前
|
SpringCloudAlibaba Sentinel 索引
【九】SpringCloud Alibaba之整合Sentinel(实现热点控制)
【九】SpringCloud Alibaba之整合Sentinel(实现热点控制)
32 1
|
2月前
|
监控 数据挖掘 索引
深度剖析Sentinel热点规则
深度剖析Sentinel热点规则
79 1
|
3月前
|
监控 测试技术 数据安全/隐私保护
如何集成Sentinel实现流控、降级、热点规则、授权规则总结
如何集成Sentinel实现流控、降级、热点规则、授权规则总结
77 0
|
7月前
|
SpringCloudAlibaba 算法 前端开发
SpringCloud Alibaba系列(三) Sentinel热点参数限流
  热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。
134 0
|
SpringCloudAlibaba Java UED
SpringCloud Alibaba学习(八):Sentinel的热点规则
热点即经常访问的数据,很多时候我们希望统计或者限制某个热点数据中访问频次最高的TopN数据,并对其访问进行限流或者其它操作 。
197 0
SpringCloud Alibaba学习(八):Sentinel的热点规则
|
监控 Sentinel 微服务
【Sentinel】流控效果与热点参数限流
【Sentinel】流控效果与热点参数限流
305 0
【Sentinel】流控效果与热点参数限流
|
Java 开发者 Sentinel
Sentinel 控制台热词参数 vip 通道 | 学习笔记
快速学习 Sentinel 控制台热词参数 vip 通道
64 0
|
SpringCloudAlibaba Sentinel 索引
SpringCloud Alibaba——Sentinel服务熔断与限流(三、热点规则)
SpringCloud Alibaba——Sentinel服务熔断与限流(三、热点规则)
SpringCloud Alibaba——Sentinel服务熔断与限流(三、热点规则)
|
缓存 Java 应用服务中间件
Sentinel Go 0.4.0 发布,支持热点流量防护能力
近期,Sentinel Go 0.4.0 正式发布,带来了热点参数流控特性,可以自动识别统计传入参数中的“热点”参数值并分别进行流控,对于防刷、热点商品访问频次控制等场景非常有用,是高可用流量防护中重要的一环。
Sentinel Go 0.4.0 发布,支持热点流量防护能力