热点参数维度流控
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
利用sentinel的热点参数流控能力,可以在参数层面对服务的qps进行限制,也可以统计通过某个热门参数访问服务的频率,可以在更细粒度的维度控制服务流量。比如一个开放接口有10个接入商,我们肯定不希望一个接入商就抢占完了所有服务资源,这时热点限流能力就可以起到很好的作用
dubbo接入热点参数限流能力
引入依赖
热点参数限流模块需要额外引入依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-parameter-flow-control</artifactId>
<version>1.6.3</version>
</dependency>
配置并读取限流规则
这里还是以文件为数据源
HotParamRule.json
DemoService的testHotParam方法的第一个入参将被热点限流规则保护,相同参数的请求qps超过10则会被限流
[
{
"resource": "org.apache.dubbo.demo.DemoService:testHotParam(java.lang.String)",
"controlBehavior": 0,
"count": 10.0,
"grade": 1,
"paramIdx" : 0
}
]
限流规则说明