Sentinel的规则说明

其中配置说明如下:

feign:
  sentinel:
    enabled: true  开启sentinel,这样可以不使用hystrix
    
    
Nacos中创建限流规则的配置:

[
    {
        "resource": "/test",
        "limitApp": "default",
        "grade": 1,
        "count": 10,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]
可以看到上面配置规则是一个数组类型,数组中的每个对象是针对每一个保护资源的配置对象,每个对象中的属性解释如下:

resource:资源名,即限流规则的作用对象
limitApp:流控针对的调用来源,若为 default 则不区分调用来源
grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
count:限流阈值
strategy:调用关系限流策略
controlBehavior 流控效果 0.快速失败 1.预热启动 2.排队等待 3. 预热启动排队等待
    public static final int CONTROL_BEHAVIOR_DEFAULT = 0;
    public static final int CONTROL_BEHAVIOR_WARM_UP = 1;
    public static final int CONTROL_BEHAVIOR_RATE_LIMITER = 2;
    public static final int CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER = 3;
clusterMode:是否为集群模式
strategy 调用关系限流策略 0. 直接 1. 关联 2.链路
    public static final int STRATEGY_DIRECT = 0;
    public static final int STRATEGY_RELATE = 1;
    public static final int STRATEGY_CHAIN = 2;)
warmUpPeriodSec 流控效果为预热启动时的预热时长(秒)
maxQueueingTimeMs 流控效果为排队等待时的等待时长 (毫秒)

3.Sentinel资源保护规则
Sentinel支持多种保护规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则、热点参数规则。
完整的限流规则设置如下:

private void initFlowQpsRule() {
    ArrayList<FlowRule> rules = new ArrayList<>();
    FlowRule rule = new FlowRule();
    rule.setCount(20);
    rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
    rule.setLimitApp("default");
    rule.setStrategy(RuleConstant.STRATEGY_CHAIN);
    rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);
    rule.setClusterMode(false);
    rules.add(rule);
    FlowRuleManager.loadRules(rules);
}
其中,FlowRule部分属性的含义说明如下;
limitApp: 是否需要针对调用来源进行限流,默认是default,即不区分嗲用来源。
strategy: 调用关系限流策略——直接、链路、关联。
controlBehavior: 流控行为,包括直接拒绝、排队等候、慢启动模式,默认是直接拒绝。
clusterMode: 是否是集群限流,默认是否。

基于并发数和QPS的流量控制
Sentinel流量控制统计有两种类型,通过grade属性来控制:
1.并发线程数(FLOW_GRADE_THREAD)
2.QPS(FLOW_GRADE_QPS)

并发线程数:并发线程数限流用来保护业务线程不被耗尽--这种可能产生资源竞争的问题
Sentinel并发线程数限流就是统计当前请求的上下文线程数量,如果超出阈值,新的请求就会被拒绝
QPS:表示每秒的查询书,也就是一台服务器每秒能够响应的查询次数。当QPS打到限流的阈值,就会触发这个限流规则。

QPS流量控制行为
当QPS超过阈值时候,就出触发流量控制行为,这种行为是通过controlBehavior来设置的,他包含:
1.直接拒绝(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)
2.Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP),冷启动
3.匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
4.冷启动+匀速排队(RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER)

直接拒绝:
直接拒绝是默认的流量控制方式,也就是请求流量超过阈值时,直接抛出异常

Warm Up:
这是一种冷启动方式,当流量突然增加的时候,我们希望处理逐步递增,这个就能够实现。

匀速排队
这种方式会严格控制请求通过的时间间隔,也就是让请求以匀速的速度通过。这种可以处理间隔性突发流量。

调用关系流量策略
调用方限流
这个就是根据请求来源进行流量控制,我们需要设置limitApp属性来设置来源心思,他有三个选项。


1.default:表示不区分调用者,也就是任何访问调用者的请求都会进行限流统计
2.{some_origin_name}:设置特定的调用者,只用来自这个的调用者请求才会进行流量统计和控制。
3.other:表示针对除{some_origin_name}外的其他调用者进行流量控制。
由于同一个资源可以配置多条规则,如果多个规则设置的limitApp不一样,name规则的生效规则顺序为:{some_origin_name}->
other->default
4.Sentinel实现服务熔断
Sentinel实现服务熔断操作的配置和限流类似,不同之处在于限流采用的是FlowRule,而熔断中采用的是DegradeRule,配置代码如下:

private static void initDegradeRule() {
    ArrayList<DegradeRule> rules = new ArrayList<>();
    DegradeRule degradeRule = new DegradeRule();
    degradeRule.setResource("key");
    degradeRule.setCount(10);
    degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
    degradeRule.setTimeWindow(10);
    degradeRule.setMinRequestAmount(5);
    degradeRule.setRtSlowRequestAmount(5);
    rules.add(degradeRule);
    DegradeRuleManager.loadRules(rules);
}
其中的属性说明:

1.grade:熔断策略,支持秒级RT、秒级异常比例、分钟级异常数。默认是秒级RT
2.timeWindow:熔断降级的时间窗口,单位为s,也就是触发熔断降级之后多长时间内自动熔断
3.rtSlowRequestAmount:在RT模式下,1s内持续多少个请求的的平均RT超出阈值后触发熔断,默认值为5
4.minRequestAmount:触发的异常熔断最小请求数,请求数小于该值时即使异常比例超出阈值也不会发生熔断,默认值为5

Sentinel提供三种熔断策略,对于不同策略,参数的含义也不一样:
1.平均响应时间(RuleConstant.DEGRADE_GRADE_RT):如果1s内持续进入5个请求对应的平均时间都超过了阈值(count,单位ms),name接下来的时间窗口(timeWindow,单位为s)内,对这个方法的调用都会自动熔断抛出异常
Sentinel默认统计的RT上线为4900ms,如果超出这个阈值都会算作4900ms,如果需要修改,则通过启动参数-Dcsp.sentinel.statistic.max.rt=xxx来配置

2.异常比例(RuleConstant.DEGRADE_GRADE_EXCEPTION_RATIO):如果每秒的资源数≥minRequestAmount(默认值是5),并且每秒的资源异常总数占总通过量的比列超过阈值count(count的取值是[0.0,1.0],表示0%-100%),则资源将进入降级状态。同样在接下来的timeWindow之类,对这个方法的调用都会自动触发熔断。

3.异常数(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT):当资源最近一分钟的异常数目超过阈值之后,会触发熔断。需要注意的是,如果timeWindow小于60s,则结束熔断状态后任然可能在进入到熔断状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木鱼-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值