Sentinel热点参数规则说明

前言

当经常访问的数据过热时,可以对其访问进行限流。例如:针对一段时间内的特定的用户、城市等进行限制。可以优先用于redis热点key的限流中。

另:本文只做规则说明,实战时可做参考,源码解析部分详见:

Sentinel热点参数如何限流【原理源码】

一、参数说明


热点参数限流由规则ParamFlowRule负责,下面看下各个属性的含义。

参数说明
resource必填项,资源名称
limitApp授权使用限制来源方,默认default
grade0:线程数(客户端并发控制)1:QPS(默认)
paramIdx必填项,热点参数索引位置 对应SphU.entry(xxx, args)中的参数索引位置
count必填项,限流阈值
controlBehavior0:直接拒绝(默认)2:匀速通过
maxQueueingTimeMs当controlBehavior=2时,排队等待时间
burstCount应对突发流量额外允许的数量
durationInSec统计窗口时间长度,默认1秒
paramFlowItemList额外选项,针对特定的参数单独限流
clusterMode是否为集群模式,默认false
clusterConfig集群限流配置

二、参数格式

1.不带额外项JSON格式

 
[
    {
        "burstCount": 0,
        "clusterMode": false,
        "controlBehavior": 0,
        "count": 5,
        "durationInSec": 1,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 0,
        "paramFlowItemList": [],
        "paramIdx": 0,
        "resource": "resA"
    }
]

2.带额外项JSON格式

 
[
    {
        "burstCount": 0,
        "clusterMode": false,
        "controlBehavior": 0,
        "count": 5,
        "durationInSec": 1,
        "grade": 1,
        "limitApp": "default",
        "maxQueueingTimeMs": 0,
        "paramFlowItemList": [
            {
                "classType": "int",
                "count": 10,
                "object": "2"
            }
        ],
        "paramIdx": 0,
        "resource": "resA"
    }
]

三、使用方式

注意:exit的时候也一定要带上对应的参数(exit(count, args)),否则可能会有统计错误

Entry entry = null;
try {
    entry = SphU.entry(resourceName, EntryType.IN, 1, paramA, paramB);
    // 业务逻辑
} catch (BlockException ex) {
    // 发送流控
} finally {
    if (entry != null) {
        entry.exit(1, paramA, paramB);
    }
}

作者丨梁勇
来源丨瓜农老梁
欢迎关注公众号「瓜农老梁」


  

       

### Sentinel 热点参数限流实现原理 #### 参数流量统计机制 热点参数限流的核心在于对特定参数及其值的流量进行精确统计。当接收到请求时,Sentinel会解析并提取指定位置的参数,随后对该参数的不同取值建立独立的计数器来跟踪访问频率[^1]。 #### 阈值判定逻辑 一旦某个具体参数值对应的累计请求数量达到预设阈值,则认为该参数成为“热点”。此时系统依据设定好的策略执行相应的限流措施,比如拒绝新的同类型请求或将超出部分请求延迟处理等操作[^3]。 #### 动态调整能力 为了适应实际业务场景的变化需求,Sentinel允许动态修改受监控的参数索引及对应的最大允许QPS(每秒查询率),而无需重启服务实例即可即时生效这些更改设置[^2]。 ```java // 定义规则示例代码片段 FlowRule rule = new FlowRule(); rule.setResource("/api/example"); rule.setGrade(RuleConstant.FLOW_GRADE_QPS); ArrayParamFlowItem item = new ArrayParamFlowItem(); item.setCount(1); // QPS threshold is set to 1 as an example. item.setParamIdx(0); // Limit on the first parameter of the request path. List<ParamFlowItem> paramItemList = Lists.newArrayList(item); rule.setParamItem(paramItemList.toArray(new ParamFlowItem[0])); ``` 通过上述方法论和技术手段的支持下,实现了高效灵活且易于管理维护的热点参数限流功能,在高并发环境下有效保障了系统的稳定性和响应速度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值