Sentinel参数解释

吴书松
吴书松
发布于 2025-05-08 / 28 阅读
1

Sentinel参数解释

1、定义一个流控规则

@Component
public class IotManageSentinelConfig {


    /**
     * 使用代码编写流控规则,(控制台方式暂不支持)
     */
    @PostConstruct
    public void initFlowRule() {
        List<FlowRule> rules = new ArrayList<>();

        //登录短信验证码限流
        FlowRule rule = new FlowRule();
        rule.setResource(IotManageConstant.SENTINEL_NUM_CHECK_BATCH);
        rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
        rule.setCount(1);
        rules.add(rule);


        /* 4.加载限流规则 */
        FlowRuleManager.loadRules(rules);
    }

}

使用:

    @SentinelResource(entryType = EntryType.IN,value = IotManageConstant.SENTINEL_NUM_CHECK_BATCH,blockHandler = "checkNumListHandler")

FlowRule参数解释

FlowRule 核心参数详解

基础参数

参数

类型

必填

说明

resource

String

资源名称(唯一标识),如接口路径、方法名等

grade

int

限流阈值类型(QPS 或 并发线程数)

count

double

限流阈值(QPS 数值或线程数)

strategy

int

流控模式(直接/关联/链路),默认直接

controlBehavior

int

流控效果(直接拒绝/预热/匀速排队),默认直接拒绝


1. grade(限流阈值类型)

java

// 常量定义在 RuleConstant 中
RuleConstant.FLOW_GRADE_QPS      // 1 - 基于 QPS 限流(默认)
RuleConstant.FLOW_GRADE_THREAD   // 0 - 基于并发线程数限流

表格

含义

适用场景

FLOW_GRADE_QPS

每秒请求数

大多数场景,精准控制流量

FLOW_GRADE_THREAD

并发线程数

保护系统资源(如连接池、线程池)


2. count(限流阈值)

java

rule.setCount(0.5);   // 0.5 QPS = 每2秒1个请求
rule.setCount(100);   // 100 QPS
rule.setCount(20);    // 20个并发线程

支持小数,可实现低频限流(如 0.1 = 10秒1个请求)


3. strategy(流控模式)

java

RuleConstant.STRATEGY_DIRECT  // 0 - 直接(默认):对当前资源限流
RuleConstant.STRATEGY_RELATE  // 1 - 关联:当关联资源达到阈值时限流
RuleConstant.STRATEGY_CHAIN   // 2 - 链路:只针对特定调用链路限流

表格

模式

说明

示例

DIRECT

直接对资源限流

/api/order 达到 100 QPS 就限流

RELATE

关联资源触发限流

/api/query 高负载时,限制 /api/write

CHAIN

指定入口限流

仅从 AppA 调用的 /api/test 限流

关联模式配置

java

rule.setStrategy(RuleConstant.STRATEGY_RELATE);
rule.setRefResource("anotherResource"); // 关联的资源名

4. controlBehavior(流控效果)⭐ 重要

java

RuleConstant.CONTROL_BEHAVIOR_DEFAULT      // 0 - 直接拒绝(默认)
RuleConstant.CONTROL_BEHAVIOR_WARM_UP      // 1 - 预热/冷启动
RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER // 2 - 匀速排队(漏桶)
RuleConstant.CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER // 3 - 预热 + 匀速排队

表格

效果

说明

额外参数

适用场景

DEFAULT

超过阈值直接拒绝

通用场景

WARM_UP

冷启动,逐渐提升到阈值

warmUpPeriodSec

系统刚启动,防止瞬间压垮

RATE_LIMITER

匀速排队,严格间隔

maxQueueingTimeMs

需要严格匀速,如数据库操作

WARM_UP_RATE_LIMITER

预热 + 匀速排队

两者都需要

冷启动后匀速处理


5. 各流控效果的额外参数

预热模式(WARM_UP)

java

rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
rule.setWarmUpPeriodSec(10);        // 预热时间(秒)
rule.setCount(100);                 // 最终阈值
// 实际效果:从 100/3 开始,10秒内逐渐提升到 100

原理:令牌桶算法,初始阈值为 count/3,经过 warmUpPeriodSec 逐渐提升到 count

匀速排队模式(RATE_LIMITER)

java

rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);
rule.setMaxQueueingTimeMs(500);     // 最大排队等待时间(毫秒)
rule.setCount(5);                   // 每秒5个请求,即每200ms一个

原理:漏桶算法,请求以固定间隔(1000/count ms)匀速通过,超出等待时间的请求被拒绝。


6. 其他参数

表格

参数

类型

说明

limitApp

String

针对特定调用来源限流,默认 default(所有来源)

clusterMode

boolean

是否为集群限流模式,默认 false

clusterConfig

ClusterFlowConfig

集群限流配置(需配合 Token Server)


完整配置示例

示例 1:基础 QPS 限流

java

FlowRule rule = new FlowRule();
rule.setResource("/api/order");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(1000);  // 1000 QPS
rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT);

示例 2:2秒1个请求(匀速排队)

java

FlowRule rule = new FlowRule();
rule.setResource("slowApi");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(0.5);   // 0.5 QPS = 2秒1个
rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER);
rule.setMaxQueueingTimeMs(3000);  // 最多等3秒

示例 3:冷启动保护

java

FlowRule rule = new FlowRule();
rule.setResource("hotApi");
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(100);
rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_WARM_UP);
rule.setWarmUpPeriodSec(10);  // 10秒内从33逐渐升到100

示例 4:关联限流(读写分离保护)

java

FlowRule rule = new FlowRule();
rule.setResource("/api/write");      // 被保护的资源
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
rule.setCount(10);
rule.setStrategy(RuleConstant.STRATEGY_RELATE);
rule.setRefResource("/api/read");    // 当读接口繁忙时,限制写接口

参数速查表

plain

┌─────────────────────────────────────────────────────────────┐
│  resource          资源名(必填)                            │
│  grade             阈值类型:QPS(1) / 线程数(0)              │
│  count             阈值数值(支持小数)                      │
│  strategy          模式:直接(0) / 关联(1) / 链路(2)         │
│  controlBehavior   效果:拒绝(0) / 预热(1) / 排队(2) / 混合(3)│
│  warmUpPeriodSec   预热时间(秒)- 预热模式用                │
│  maxQueueingTimeMs 最大排队时间(毫秒)- 排队模式用          │
│  refResource       关联资源名 - 关联模式用                   │
│  limitApp          限制来源,默认 default                    │
└─────────────────────────────────────────────────────────────┘

这些参数可以灵活组合,满足从简单限流到复杂流量控制的各种需求。