Spring Cloud Alibaba中的流量控制规则有哪些类型?

在Spring Cloud Alibaba中,Sentinel作为流量控制的主要工具,提供了多种类型的流量控制规则,以适应不同的业务场景和需求。这些规则可以帮助你实现限流、熔断、降级等目的。以下是Sentinel提供的主要流量控制规则类型:

1. 流量控制规则(Flow Control Rules)

流量控制规则是最基本的规则类型,用于限制单位时间内到达系统的请求数量。主要有两种流量控制等级:

  • 直接(Direct):直接限制每秒的请求量(QPS)或线程数(Thread)。这是最简单的形式,适合于大多数场景。
FlowRule rule = new FlowRule();
rule.setResource("your-resource-name");
rule.setGrade(SentinelConst.FLOW_GRADE_QPS); // QPS 基于每秒请求量
rule.setCount(200); // 设置每秒最多接受的请求数
  • 关联(Linked):除了直接限制自身资源外,还可以关联到其他资源的QPS或线程数。当关联资源超过设定阈值时,也会触发流控。
FlowRule linkedRule = new FlowRule();
linkedRule.setResource("your-resource-name");
linkedRule.setGrade(SentinelConst.FLOW_GRADE_QPS);
linkedRule.setCount(200);
linkedRule.setControlBehavior(SentinelConst.CONTROL_TRAFFIC_SHAPING);
linkedRule.setClusterMode(true);
linkedRule.setLinkedResources(new LinkedResource[]{new LinkedResource("linked-resource-name")});

2. 热点规则(HotKey Rule)

热点规则用于限制针对某个热点参数的请求频率,特别适用于参数敏感的场景。例如,限制针对特定用户ID的请求频率。

HotParamFlowRule hotParamRule = new HotParamFlowRule();
hotParamRule.setResource("your-resource-name");
hotParamRule.setParamIdx(0); // 参数索引
hotParamRule.setThreshold(100); // 阈值
hotParamRule.setThresholdType(ThresholdType.ENTRY_COUNT); // 阈值类型

3. 系统规则(System Rule)

系统规则用于保护整个JVM或机器的系统健康度,例如根据CPU使用率、平均负载、线程数等指标进行流量控制。

SystemRule systemRule = new SystemRule();
systemRule.setResource("your-resource-name");
systemRule.setMetric(SystemRuleConstant.CPU_USAGE); // CPU使用率
systemRule.setThreshold(80); // 阈值
systemRule.setStrategy(SystemRuleConstant.WARM_UP_STRATEGY); // 策略

4. 授权规则(Authority Rule)

授权规则允许或拒绝来自特定来源的请求,比如基于客户端IP地址或用户身份信息。

AuthorityRule authorityRule = new AuthorityRule();
authorityRule.setResource("your-resource-name");
authorityRule.setStrategy(AuthorityRuleConstant.AUTHORITY_WHITE_LIST);
authorityRule.setLimitApp("app1, app2"); // 应用程序列表

5. 降级规则(Degrade Rule)

降级规则用于在系统负载较高时主动降低服务的可用性,避免系统崩溃或长时间延迟。例如,根据异常比例或异常数来判断是否需要降级。

DegradeRule degradeRule = new DegradeRule();
degradeRule.setResource("your-resource-name");
degradeRule.setCount(10); // 异常计数
degradeRule.setStatIntervalInMs(1000); // 统计间隔
degradeRule.setRuleType(DegradeRuleConstant.DEGRADE_BY_EXCEPTION_COUNT); // 降级类型

6. 链路规则(Chain Rule)

链路规则可以将多个规则组合在一起,形成一个规则链路,使得规则生效更为灵活。

ChainNode node1 = ChainNode.createFlowNode("resource1", 200);
ChainNode node2 = ChainNode.createDegradeNode("resource2", 10);
ChainNode node3 = ChainNode.createAuthorityNode("resource3", AuthorityRuleConstant.AUTHORITY_WHITE_LIST, "127.0.0.1");

ChainRule chainRule = new ChainRule();
chainRule.setResource("your-resource-name");
chainRule.setNodes(new ChainNode[]{node1, node2, node3});

通过这些规则类型,你可以根据实际业务需求灵活配置Sentinel来实现不同的流量控制策略。这些规则可以单独使用,也可以组合起来形成复杂的控制逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值