概述
在分布式或微服务场景下,系统通常需要应对不可预测的流量高峰或突发流量冲击。为了避免由于某个服务被流量“打爆”而引发连锁故障,常见做法就是对服务接口进行限流。Spring Cloud Alibaba Sentinel 提供了非常灵活且强大的流量控制(Rate Limiting)能力,帮助我们在不同场景下保护服务的稳定性。
流量控制的核心概念
-
资源(Resource)
- 资源是 Sentinel 进行限流保护的最小粒度,可以是一个方法、一个服务接口,甚至是一个代码块。
- 在 Spring Cloud Alibaba 中,常见做法是借助
@SentinelResource
注解标记接口或者在网关层对路径/服务进行保护。
-
规则(Rule)
- 流量控制规则决定了对某个资源施加怎样的限流策略和阈值。
- 常见要素:
- 限流阈值类型:QPS 或并发线程数(
grade
) - 阈值大小(
count
) - 流控效果(
controlBehavior
,例如快速失败、冷启动(Warm Up)、排队等待) - 流控模式(
strategy
,可以基于调用关系做链路限流,也可以做默认的直接限流等)
- 限流阈值类型:QPS 或并发线程数(
-
控制效果(Control Behavior)
Sentinel 提供多种限流行为:- 快速失败(RuleConstant.CONTROL_BEHAVIOR_DEFAULT):超过阈值后,直接拒绝请求并抛出异常。
- 预热/冷启动(RuleConstant.CONTROL_BEHAVIOR_WARM_UP):通过预热方式逐步提升限流阈值,一般适合突发流量时保护系统缓慢升压,避免系统瞬时过载。
- 排队等待(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER):超出阈值时排队,超过超时时间后直接拒绝。
-
调用关系策略(Strategy)
- 可以根据调用链路来配置限流规则,当某个上游->下游的调用链路达到阈值时才进行限流,而不是对所有调用统一限流。
- 对于资源间有复杂调用链路的情况,能实现更精准的限流效果。
流量控制的常见配置方式
1. 通过控制台配置
Sentinel 提供了可视化的控制台(Dashboard),能够实时监控应用的 QPS、RT(响应时间)、限流熔断触发次数等,同时也可以动态管理流控规则,主要流程如下:
-
启动 Sentinel 控制台
- 下载或打包 Sentinel Dashboard 工程(典型端口为 8080),启动后访问
http://localhost:8080
。
- 下载或打包 Sentinel Dashboard 工程(典型端口为 8080),启动后访问
-
应用集成 Sentinel
- 在
pom.xml
中引入依赖:<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
- 在