Sentinel资源保护规则

(1)介绍

Sentinel支持多种保护规则:流量控制规则、熔断降级规则、系统保护规则、来源访问控制规则、热点参数规则。
限流规则先通过FlowRule来定义限流规则,然后通过FlowRuleManager.loadRules来加载规则列表。完整的限流规则设置代码如下:

 //定义规则列表
        List<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);

(2)资源保护规则

在这里插入图片描述

count:限流阈值。

Grade:限流阈值类型,QPS模式(1)或并发线程数模式(0)。

resource:设置需要保护的资源。这个资源的名称必须和SphU.entry中使用的名称保持一致

limitApp:是否需要针对调用来源进行限流,默认是default,即不区分调用来源。

strategy:调用关系限流策略-直接、链路、关联。

controlBehavior:流控行为,包括直接拒绝、排队等待、慢启动模式,默认是直接拒绝。

clusterMode:是否是集群限流,默认为否.

(3)Grade:限流阈值类型

Sentinel流量控制统计有两种类型,通过grade属性来控制;
1、并发线程数(FLOW_GRADE_THREAD)
2、QPS(FLOW_GRADE_QPS)
Sentinel并发线程数限流就是统计当前请求的上下文线程数量,如果超出阈值,新的请求就会被拒绝。
QPS ( Queries Per Second)表示每秒的查询数,也就是一台服务器每秒能够响应的查询次数。当QPS达到限流的阈值时,就会触发限流策略。

(4)controlBehavior:流控行为

当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)

直接拒绝
直接拒绝是默认的流量控制方式,也就是请求流量超出阈值时,直接抛出一个FlowException。

Warm Up
Warm Up是一种冷启动(预热)方式。当流量突然增大时,也就意味着系统从空闲状态突然切换到繁忙状态,有可能会瞬间把系统压垮。当我们希望请求处理的数量逐步递增,并在一个预期时间之后达到允许处理请求的最大值时,Warm Up就可以达到这个目的。
比如当前系统所能够处理的最大并发数是480,首先,系统一直处于空闲状态,接着请求量突然直线升高。这个时候系统并不是直接将QPS拉到最大值,而是在一定时间内逐步增加阈值,而中间这段时间就是一个系统逐步预热的过程。

匀速排队
匀速排队的方式会严格控制请求通过的间隔时间,也就是让请求以均匀的速度通过,其实相当于限流算法的漏桶限流算法。

(5)调用关系流量策略

调用关系包括调用方和被调用方,一个方法又可能会调用其他方法,形成一个调用链。所谓的调用关系流量策略,就是根据不同的调用维度来触发流量控制。
1、根据调用方限流。
2、根据调用链路入口限流。
3、具有关系的资源流量控制(关联流量控制)。

【调用方限流】
所谓调用方限流,就是根据请求来源进行流量控制,我们需要设置limitApp属性来设置来源信息,它有三个选项。
1、default:表示不区分调用者,也就是任何访问调用者的请求都会进行限流统计。
2、(some_origin_name}:设置特定的调用者,只有来自这个调用者的请求才会进行流量统计和控制。
3、other :表示针对除{some_origin_name}外的其他调用者进行流量控制。

由于同一个资源可以配置多条规则,如果多个规则设置的limitApp不一样,那么规则的生效顺序为:{some_origin_name}→other→default。

【根据调用链路入口限流】
一个被限流保护的方法,可能来自不同的调用链路。比如针对资源nodeA,入口Entrance1和入口Entrance2都调用了资源nodeA,那么Sentinel允许只根据某个入口来进行流量统计。比如我们针对nodeA资源,设置针对Entrance1入口的调用才会统计请求次数。它在一定程度上有点类似于调用方限流。
在这里插入图片描述

【关联流量控制】
当两个资源之间存在依赖关系或者资源争抢时,我们就说这两个资源存在关联。这两个存在依赖关系的资源在执行时可能会因为某一个资源执行操作过于频繁而影响另外一个资源的执行效率,所以关联流量控制(流控)就是限制其中一个资源的执行流量。

猜你喜欢

转载自blog.csdn.net/Octopus21/article/details/114902083