一、Sentinel 核心概念
1. 资源(Resource)
资源是 Sentinel 治理的基本单元,可以是任意需要保护的接口、方法或服务。通过 @SentinelResource
注解或代码显式定义资源,Sentinel 将根据规则对资源进行流量控制与熔断降级 。
2. 规则类型
- 流量控制规则(FlowRule):限制 QPS、并发线程数等,支持直接拒绝、排队等待等策略 。
- 熔断降级规则(DegradeRule):基于慢调用比例、异常比例或异常数触发熔断 。
- 系统保护规则(SystemRule):根据系统负载(如 CPU、入口 QPS)动态调整流量阈值 。
- 热点参数规则(ParamFlowRule):针对高频参数(如用户 ID)进行限流 。
3. 实时监控与 SPI 扩展
- 实时统计请求通过/拒绝数,并通过 Dashboard 可视化展示 。
- 提供 SPI 扩展接口,支持自定义规则解析器、适配器等 。
二、核心组件解析
1. SlotChain(处理链)
Sentinel 的核心处理流程基于责任链模式,由多个 Slot 串联执行:
- NodeSelectorSlot:创建资源对应的统计节点(如
ClusterNode
) 。 - ClusterBuilderSlot:构建集群限流节点,用于分布式限流 。
- StatisticSlot:实时统计请求数据(通过数、拒绝数、响应时间) 。
- FlowSlot & DegradeSlot:分别执行流量控制和熔断降级逻辑 。
2. Rule Manager(规则管理器)
- 动态加载和管理规则(如
FlowRuleManager
、DegradeRuleManager
),支持从 Nacos 或 Dashboard 同步规则 。
3. 流量统计模块
- LeapArray:滑动窗口算法实现,将时间窗口划分为多个子窗口(如 1 秒分为 10 个 100ms 窗口),动态统计流量数据 。
4. Sentinel Dashboard
- 可视化控制台,支持实时监控、规则配置及集群限流管理 。
三、工作流程
-
资源访问入口
请求到达时,通过SphU.entry(resourceName)
进入 Sentinel 处理链。 -
SlotChain 处理
请求 → NodeSelectorSlot → ClusterBuilderSlot → StatisticSlot → FlowSlot → DegradeSlot → 执行目标方法
- StatisticSlot:记录请求通过数、响应时间等指标 。
- FlowSlot:根据 QPS 或线程数阈值判断是否限流,触发
BlockException
时拦截请求。 - DegradeSlot:检查熔断状态,若处于 Open 状态则直接拒绝请求 。
-
规则动态更新
- 通过
SentinelDataSource
监听配置中心(如 Nacos)的规则变更,实时更新本地规则缓存。
- 通过
四、在 Spring Cloud Gateway 中的集成原理
1. 依赖与配置
- 适配模块:引入
spring-cloud-alibaba-sentinel-gateway
,提供网关专用过滤器SentinelGatewayFilter
。 - 路由规则映射:将 Gateway 的路由 ID 或 API 分组作为 Sentinel 资源,通过
routeId
或自定义 API 名称绑定限流规则 。
2. 过滤器链集成
- 全局过滤器:
SentinelGatewayFilter
拦截请求,调用GatewayFlowSlot
执行网关维度的流量控制 。 - 熔断降级:结合
DegradeRule
实现慢调用熔断,通过Spring Cloud CircuitBreaker
集成 Hystrix 或 Resilience4j 。
3. 动态规则同步
- 控制台推送:通过 Sentinel Dashboard 下发网关限流规则至 Gateway 服务 。
- Nacos 集成:将网关规则存储在 Nacos 配置中心,Gateway 监听配置变更并动态生效 。
4. 流量统计与负载均衡
- 权重分流:结合 Gateway 的
Weight
断言,将流量按比例分发到不同服务实例,Sentinel 监控各实例的负载状态 。 - 热点参数限流:针对请求头、Cookie 或 URL 参数进行细粒度控制(如限制特定用户 ID 的访问频率)。
五、生产实践建议
-
性能优化
- 使用
LongAdder
替代AtomicLong
统计指标,减少高并发下的竞争开销 。 - 启用 Sentinel 的 Warm Up 模式,避免冷启动时流量激增 。
- 使用
-
监控告警
- 集成 Prometheus 暴露监控指标,通过 Grafana 展示网关流量与熔断状态。
-
灰度发布
- 结合
Weight
断言逐步切量,通过 Sentinel 监控新版本服务的稳定性 。
- 结合
总结
Sentinel 通过 责任链处理机制、滑动窗口统计 和 动态规则管理 实现精准流量控制,在 Spring Cloud Gateway 中通过全局过滤器与动态规则同步机制无缝集成。其核心优势在于高扩展性设计(如 SPI 接口)与深度 Spring 生态整合,适合需要高并发治理能力的微服务场景。