Sentinel规则之热点参数限流规则

更新时间:2023-05-16 16:44:24 阅读: 评论:0

Sentinel规则之热点参数限流规则
Sentinel规则之热点参数限流规则
☞,带你有序的阅读和学习!
⽂档:
概述
何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最⾼的 Top K 数据,并对其访问进⾏限制。⽐如:商品 ID 为参数,统计⼀段时间内最常购买的商品 ID 并进⾏限制
⽤户 ID 为参数,针对⼀段时间内频繁访问的⽤户 ID 进⾏限制
热点参数限流会统计传⼊参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调⽤进⾏限流。热点参数限流可以看做是⼀种特殊的流量控制,仅对包含热点参数的资源调⽤⽣效。
Sentinel 利⽤ LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进⾏参数级别的流控。
热点参数规则
热点参数规则(ParamFlowRule)类似于流量控制规则(FlowRule):
属性说明默认值resource资源名,必填
count限流阈值,必填
grade限流模式QPS 模式durationInSec统计窗⼝时间长度(单位为秒),1.6.0 版本开始⽀持1s controlBehavior流控效果(⽀持快速失败和匀速排队模式),1.6.0 版本开始⽀持快速失败maxQueue
ingTimeMs最⼤排队等待时长(仅在匀速排队模式⽣效),1.6.0 版本开始⽀持0ms paramIdx热点参数的索引,必填,对应 (xxx, args) 中的参数索引位置
paramFlowItemList 参数例外项,可以针对指定的参数值单独设置限流阈值,不受前⾯ count 阈值的限制。仅⽀持基本类型和字符串类
clusterMode是否是集群参数流控规则fal clusterConfig集群流控相关配置
属性说明默认值上⾯都是摘抄⼦官⽅⽹站,下⾯使⽤代码来测试。
我们先看⼀下热点参数规则的源码:
public class ParamFlowRule extends AbstractRule {
//限流模式
private int grade = RuleConstant.FLOW_GRADE_QPS;
//热点参数的索引
private Integer paramIdx;
足球素材
//The threshold count.
城市供水
private double count;
//流控效果
private int controlBehavior = RuleConstant.CONTROL_BEHAVIOR_DEFAULT;
//最⼤排队等待时长
private int maxQueueingTimeMs =0;
private int burstCount =0;
苯并恶嗪//统计窗⼝时间长度斯人已逝
private long durationInSec =1;
//参数的额外项,可以针对指定的参数值单独设置限流阈值,不受前⾯的count影响,仅⽀持基本数据类型和字符串
private List<ParamFlowItem> paramFlowItemList =new ArrayList<ParamFlowItem>();
//额外参数
private Map<Object, Integer> hotItems =new HashMap<Object, Integer>();
//是否是集群参数流控规则默认是fal
private boolean clusterMode =fal;
private ParamFlowClusterConfig clusterConfig;
}
public class ParamFlowItem {
private String object;//参数值
private Integer count;//限流阈值
private String classType;//参数类型
}
实验
初始化规则
public static void initParamFlowRule(){
List<ParamFlowRule> rules =new ArrayList<>();
ParamFlowRule rule =new ParamFlowRule();
//阈值类型:只⽀持QPS
rule.tGrade(RuleConstant.FLOW_GRADE_QPS);
//阈值
rule.tCount(1);
//资源名
rule.tResource("test");
rule.tParamIdx(0);//指配热点参数的下标
//统计窗⼝时间长度
rule.tDurationInSec(10);
List<ParamFlowItem> items =new ArrayList<>();
ParamFlowItem item =new ParamFlowItem();
item.tClassType(TypeName());
item.tCount(2);
item.tObject("123456");//需要统计的值
ParamFlowItem item1 =new ParamFlowItem();
item1.tClassType(Name());
运动前吃什么item1.tCount(3);
item1.tObject("12");
items.add(item);
items.add(item1);
rule.tParamFlowItemList(items);
rules.add(rule);
ParamFlowRuleManager.loadRules(rules);
}
上述初始化规则代码相当于按如下在控制台页⾯配置 :
逻辑代码
@GetMapping("/test")
public String test(
@RequestParam("urname") String urname,
@RequestParam("password") String password,
描写颜色的abb@RequestParam("age")int age){
String echo = st(urname,password,age);
SimpleDateFormat dateFormat =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
System.out.println(echo+" | t:"+dateFormat.format(new Date()));
return"访问成功";
}
public interface EchoService {
String test(String urname, String password,int age);
}
@Service
public class EchoServiceImpl implements EchoService {
@Override
@SentinelResource(value ="test",blockHandler ="handleBlockForTest")
public String test(String urname,String password,int age){
return"urname:"+urname +" password:"+password +" age:"+age;
}
public String handleBlockForTest(String urname, String password,int age, BlockException e){
return"urname:"+urname +" password:"+password +" age:"+age+"
e:"+e.getClass().getSimpleName();
}
continue
}
测试1
localhost:8083/test?urname=admin&password=123456&age=12
参数索引设置为:0
如果使⽤上述路径测试,结果为:
可以看出,pasd的数量为1条,所以有效的阈值为1,统计的热点参数是urname。
测试2
localhost:8083/test?urname=admin&password=123456&age=12
参数索引设置为:1
可以看出,pasd的数量为2条,所以有效的阈值为2,统计的热点参数,由于上⾯设置的为1,所以为password。
动画图片头像我们将password的123456修改⼀下,设置为12345,测试结果如下:
pasd的条数为1条,所以在额外的参数不匹配时,阈值还原到了第⼀个热点参数:urname。
总结
热点参数限流规则主要是针对请求参数来统计,并实现限流的。⾸先热点参数是基于QPS统计,如果参数索引设置为0,则以第⼀个参数统计为准,阈值也是按照基本参数中的阈值来控制的,但是指定的是额外的参数列表的下标,则需要提供指定的热点参数的值,如果当前访问的参数与预设定的参数不⼀致,依旧与第⼀个参数的阈值为准。

本文发布于:2023-05-16 16:44:24,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/904451.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:参数   热点   限流   规则   统计   阈值   设置
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图