Sentinel热点参数限流

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:
- 商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制
- 用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制
热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。
示例
//热点限流
@GetMapping("/testHotKey")
@SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey")
public String testHotKey(@RequestParam(value = "p1", required = false) String p1,
@RequestParam(value = "p2", required = false) String p2) {
return "*****testHotKey";
}
public String deal_testHotKey (String p1, String p2, BlockException exception) {
return "****deal_testHotKey";
}
配置:索引为第0个的参数(p1)阈值为1

-
携带p1参数快速多次访问:

超过1秒一次的限制,触发blockHandler方法。 -
携带p2参数快速访问多次:

一切正常。 -
同时携带p1和p2参数快速访问:

触发blockHandler方法。
参数例外项

上述案例在访问超过1秒1个后马上被限流。但是,我们希望p1参数当它时某个特殊值时,它的限流值和平时不一样。
比如:当p1=5时,它的阈值可以达到200;其它值仍然为1

-
携带p1=5快速多次访问:正常

-
携带p1=3快速多次访问:触发blockHandler方法

注意:
- @SentinelResource处理的是Sentinel控制台配置的违规情况,有blockHandler方法配置的兜底处理;
- 如果逻辑代码中出现其它RuntimeException,@SentinelResource是不管的。
本文介绍Sentinel的热点参数限流功能,用于限制高频率访问的特定参数,如商品ID或用户ID,通过配置限流阈值实现对热点数据的访问控制。文章通过示例代码展示了如何使用@SentinelResource注解实现热点参数限流,以及如何设置参数例外项。
4629

被折叠的 条评论
为什么被折叠?



