Spring Cloud 整合 Sentinel 完全指南
一、Sentinel 核心功能详解
1. 流量控制
- QPS限流:控制每秒请求量,防止系统过载
- 并发线程控制:限制资源并发线程数,避免线程耗尽
- 流控模式:
- 直接限流:针对当前资源
- 关联限流:关联资源超限时触发
- 链路限流:基于调用链路限流
2. 熔断降级
- 慢调用比例:响应时间超过阈值触发熔断
- 异常比例:异常请求占比超阈值触发
- 异常数:单位时间内异常数超阈值触发
- 熔断恢复:熔断后自动检测恢复
3. 系统保护
- Load自适应:根据系统负载动态调整流量
- CPU使用率保护:CPU超阈值时自动限流
- 平均RT保护:响应时间过长时触发保护
4. 热点防护
- 参数限流:针对热点参数单独限流
- 参数例外项:支持特定参数特殊配置
- 统计窗口:可配置统计时间窗口
二、环境配置
1. 依赖引入
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 基础配置
spring:
cloud:
sentinel:
transport:
dashboard: localhost:8080
port: 8719
eager: true
filter:
url-patterns: /**
三、流量控制实现
1. 注解方式
@GetMapping("/api/order")
@SentinelResource(value = "orderQuery",
blockHandler = "handleBlock",
fallback = "handleFallback")
public Order queryOrder(Long id) {
}
2. 流控规则参数
参数 | 类型 | 说明 | 示例 |
---|
grade | int | 0-线程数,1-QPS | 1 |
count | double | 阈值 | 100.0 |
strategy | int | 0-直接,1-关联,2-链路 | 0 |
controlBehavior | int | 0-快速失败,1-WarmUp,2-排队 | 0 |
四、熔断降级策略
graph TD
A[触发条件] --> B{慢调用比例}
A --> C{异常比例}
A --> D{异常数}
B --> E[RT>阈值]
C --> F[比例>阈值]
D --> G[次数>阈值]
五、控制台监控
监控指标 | 正常范围 | 告警阈值 |
---|
Pass QPS | <80%阈值 | ≥90%阈值 |
Block QPS | <5%总量 | ≥10%总量 |
平均RT | <500ms | ≥1000ms |
异常比例 | <5% | ≥20% |
六、规则持久化
sequenceDiagram
participant App
participant Nacos
participant Sentinel
App->>Nacos: 1.获取规则
Nacos-->>App: 2.返回规则
App->>Sentinel: 3.加载规则
Sentinel-->>Nacos: 4.心跳同步
七、最佳实践
-
配置原则
-
性能调优
参数 | 建议值 | 说明 |
---|
metric.statistic.interval | 2000ms | 统计间隔 |
log.max.file.count | 7 | 日志保留天数 |
八、问题排查
graph LR
A[控制台无数据] --> B[检查配置]
A --> C[检查网络]
A --> D[检查依赖]
B --> E[eager=true]
C --> F[端口连通]
D --> G[适配器依赖]