Skip to content

Sentinel

Sentinel 以 Resource 为保护对象,通过实时统计和规则判断提供流量控制、并发限制、熔断降级、热点参数限流、系统自适应保护与授权控制。

保护目标

问题机制作用
突发流量超过容量QPS 限流、Warm Up、匀速排队控制进入资源的速率
慢调用占满工作线程并发线程数控制限制同时执行的调用数量
下游持续失败或变慢熔断器在 Open 窗口快速失败,Half-Open 探测恢复
热点参数集中访问Param Flow对指定参数值单独限流
机器整体负载过高System Rule根据 Load、CPU、入口 QPS 等实施保护

限流、隔离、熔断和降级不是同一概念。限流控制进入速度,并发隔离限制占用量,熔断根据下游健康状态暂时切断调用,Fallback 定义失败后的业务返回。

Slot Chain

Slot 分别构建调用上下文、聚合指标并执行规则。实际 Slot 顺序和扩展点以所用 Sentinel 版本为准。

接入

xml
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
yaml
spring:
  cloud:
    sentinel:
      transport:
        dashboard: ${SENTINEL_DASHBOARD:127.0.0.1:8858}
      eager: true

Dashboard 用于查看指标和编辑规则,不在应用请求链路上。Dashboard 不可用不应导致已加载规则失效,但无法继续观察和修改规则;生产还需要认证、访问控制和高可用方案。

Resource 与异常处理

java
@SentinelResource(
    value = "OrderService.create",
    blockHandler = "handleBlocked",
    fallback = "handleFailure"
)
public Order create(CreateOrderCommand command) {
    return orderRepository.create(command);
}
  • blockHandler 处理 Sentinel 规则触发的 BlockException
  • fallback 处理业务执行抛出的异常,具体排除项由配置决定。
  • Handler 的参数和返回类型必须符合注解约定。
  • Fallback 不应伪造成功结果;订单、支付等场景应返回明确失败、降级数据或异步受理状态。

流量控制

维度选择
阈值类型QPS 或并发线程数
调用关系当前资源、关联资源、入口链路、调用来源
控制效果快速失败、Warm Up、匀速排队

匀速排队用于削平突发,不等于提供持久消息队列;等待队列受进程内存、超时和实例生命周期限制。线程数规则是轻量并发限制,也不等于把业务切换到独立线程池。

熔断降级

Sentinel 1.8+ 的常见熔断策略包括慢调用比例、异常比例和异常数。

熔断规则需要最小请求数、统计窗口和熔断时长共同约束。低流量接口若只设置异常比例,可能因少量失败频繁熔断。

OpenFeign

yaml
spring:
  cloud:
    openfeign:
      sentinel:
        enabled: true

不同版本的属性前缀曾发生变化,应以目标版本配置元数据为准。FallbackFactory 适合保留原始异常,但必须区分超时、熔断、限流和业务错误。

规则持久化

模式数据流适用性
原始模式Dashboard 直接推送客户端内存仅用于测试,重启丢失
Pull客户端定期从文件或存储拉取简单但更新延迟和一致性有限
Push配置中心为事实源,客户端监听变化生产常用,需要改造 Dashboard 或治理平台

生产 Push 模式应当是“控制台/治理平台 → Nacos 等配置中心 → Sentinel Client”,而不是 Dashboard 只写客户端后再期待客户端反向持久化。

xml
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

规则需要版本、审计、灰度和回滚。应监控规则版本、加载错误、Blocked QPS、通过 QPS、线程数和熔断状态。

使用边界

  • System Rule 是实例级最后防线,不替代容量规划和自动扩缩容。
  • 授权规则基于调用来源标识,不应替代网关认证和零信任身份。
  • 限流阈值来自容量测试与 SLO,不应只凭线上峰值设置。
  • 服务端重试会放大流量,必须与超时、熔断和 Retry Budget 联合设计。
  • Sentinel 保护应用进程;网关、消息队列、数据库和外部依赖仍需各自的保护机制。