目录
[一、生产环境为什么必须用 Sentinel?](#一、生产环境为什么必须用 Sentinel?)
二、生产环境接入步骤(SpringBoot/SpringCloud)
[1. 核心依赖(Maven)](#1. 核心依赖(Maven))
[2. 生产配置(application.yml)](#2. 生产配置(application.yml))
[3. 启动参数(生产 JVM 参数)](#3. 启动参数(生产 JVM 参数))
[三、生产环境 5 大核心规则实战(最常用)](#三、生产环境 5 大核心规则实战(最常用))
[1. 流量控制(QPS 限流)------ 最常用](#1. 流量控制(QPS 限流)—— 最常用)
[代码方式(测试 / 初始化)](#代码方式(测试 / 初始化))
[2. 线程数限流(防止慢请求占满线程池)](#2. 线程数限流(防止慢请求占满线程池))
[3. 熔断降级(生产保命用)](#3. 熔断降级(生产保命用))
[4. 热点参数限流(防刷 / 防爬虫)](#4. 热点参数限流(防刷 / 防爬虫))
[5. 系统自适应保护(全局防护,生产必开)](#5. 系统自适应保护(全局防护,生产必开))
[1. 注解方式(最简单,生产首选)](#1. 注解方式(最简单,生产首选))
[2. 原生代码方式(灵活控制)](#2. 原生代码方式(灵活控制))
[3. Feign 调用熔断(微服务必备)](#3. Feign 调用熔断(微服务必备))
[六、生产环境 Sentinel 控制台部署(Dashboard)](#六、生产环境 Sentinel 控制台部署(Dashboard))
[1. 下载启动](#1. 下载启动)
[2. 控制台功能](#2. 控制台功能)
[1. 日志目录](#1. 日志目录)
[2. 常用排查命令](#2. 常用排查命令)
[3. 常见问题](#3. 常见问题)
[1. 阈值设置原则](#1. 阈值设置原则)
[2. 规则配置优先级](#2. 规则配置优先级)
[3. 高可用保障](#3. 高可用保障)
[4. 业务兜底](#4. 业务兜底)
Sentinel 是阿里开源的流量控制、熔断降级、系统负载保护 组件,专门解决微服务 / 分布式项目中的服务雪崩、流量突刺、依赖不稳定等生产问题。
我会从生产环境真实落地流程 出发,讲清楚接入、配置、规则、监控、高可用、最佳实践,全程 Java 实战,可直接用于公司生产。
一、生产环境为什么必须用 Sentinel?
先明确生产痛点,Sentinel 就是为解决这些而生:
- 流量突增:秒杀、促销、爬虫导致接口被打挂
- 依赖故障:调用的下游服务超时 / 报错,拖垮自身
- 服务雪崩:一个节点故障,级联导致整个链路崩溃
- 负载过高:CPU/Load 飙高,服务假死
- 缺乏监控:不知道哪里流量大、哪里慢、哪里报错
Sentinel 核心能力:
- 流量控制(QPS / 线程数)
- 熔断降级(慢调用 / 异常比例)
- 系统保护(CPU/Load 自适应限流)
- 热点参数限流(防爬虫 / 防刷)
- 网关层限流(Spring Cloud Gateway)
- 实时监控 + 控制台
二、生产环境接入步骤(SpringBoot/SpringCloud)
1. 核心依赖(Maven)
生产推荐稳定版 :2.1.6 或 1.8.6(兼容老项目)
<!-- 核心包 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-core</artifactId>
<version>2.1.6</version>
</dependency>
<!-- SpringBoot 自动装配(必选,生产用这个) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-boot-starter</artifactId>
<version>2.1.6</version>
</dependency>
<!-- 对接控制台(生产必须) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-transport-simple-http</artifactId>
<version>2.1.6</version>
</dependency>
<!-- Feign 调用限流(微服务必选) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-feign-adapter</artifactId>
<version>2.1.6</version>
</dependency>
<!-- 网关限流(Gateway 项目才加) -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-spring-cloud-gateway-adapter</artifactId>
<version>2.1.6</version>
</dependency>
2. 生产配置(application.yml)
这是生产环境标准配置,直接复制可用
spring:
cloud:
sentinel:
# 关闭懒加载(生产必须开启,服务启动就注册到控制台)
eager: true
# 控制台地址(生产部署的 Sentinel Dashboard 地址)
transport:
dashboard: 192.168.1.100:8858
# 客户端与控制台通信端口(自动分配,不用改)
port: 8719
# 流控规则持久化(生产必须配置,否则重启规则丢失)
datasource:
ds1:
nacos:
server-addr: 192.168.1.101:8848
dataId: ${spring.application.name}-sentinel-flow
groupId: SENTINEL_GROUP
data-type: json
rule-type: flow
3. 启动参数(生产 JVM 参数)
# 项目名称 + 控制台地址 + 日志路径(生产必须指定日志)
java -jar app.jar \
-Dcsp.sentinel.app.name=order-service \
-Dcsp.sentinel.dashboard.server=192.168.1.100:8858 \
-Dcsp.sentinel.log.dir=/data/logs/sentinel \
-Dcsp.sentinel.metric.file.single.size=52428800 \
-Dcsp.sentinel.metric.file.total.count=10
三、生产环境 5 大核心规则实战(最常用)
Sentinel 规则必须贴合业务 ,我给你生产可直接用的配置。
1. 流量控制(QPS 限流)------ 最常用
场景:限制接口每秒最多请求数,防止打挂服务。
代码方式(测试 / 初始化)
// 定义资源名(接口名/方法名)
String resource = "order:createOrder";
// 构建流控规则
FlowRule rule = new FlowRule();
rule.setResource(resource);
// 限流阈值:QPS = 100
rule.setCount(100);
// 限流模式:QPS 模式
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
// 生效
FlowRuleManager.loadRules(Collections.singletonList(rule));
控制台配置(生产推荐)
- 资源名:
order:createOrder - 阈值类型:QPS
- 单机阈值:100(根据压测结果填)
- 流控模式:直接
- 流控效果:快速失败(生产默认)
2. 线程数限流(防止慢请求占满线程池)
场景:下游接口响应慢,自身线程被占满,导致新请求无法处理。
rule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
rule.setCount(20); // 最多 20 个线程同时执行该接口
3. 熔断降级(生产保命用)
场景:调用支付 / 库存服务超时 / 报错,自动切断调用,防止雪崩。
Sentinel 熔断 3 种策略(生产优先用慢调用比例):
- 慢调用比例(推荐):响应时间超过阈值的请求占比过高
- 异常比例:报错请求占比过高
- 异常数:单位时间报错数过多
实战:慢调用熔断
DegradeRule rule = new DegradeRule();
rule.setResource("pay:createPay");
// 熔断策略:慢调用比例
rule.setGrade(RuleConstant.DEGRADE_GRADE_RT);
// 慢调用阈值:RT > 200ms 算慢
rule.setCount(200);
// 慢调用比例阈值:50%
rule.setSlowRatioThreshold(0.5);
// 熔断时长:10 秒(熔断后 10s 内拒绝请求)
rule.setTimeWindow(10);
// 最小请求数:5(不足 5 个不熔断,避免误判)
rule.setMinRequestAmount(5);
4. 热点参数限流(防刷 / 防爬虫)
场景:同一个用户 ID / 商品 ID 频繁请求,限制单用户 QPS。
ParamFlowRule rule = new ParamFlowRule();
rule.setResource("product:getDetail");
// 对第 0 个参数限流(商品 ID)
rule.setParamIdx(0);
// 单个商品 ID 每秒最多 5 次请求
rule.setCount(5);
5. 系统自适应保护(全局防护,生产必开)
场景:服务器 CPU 飙高 > 70%,自动限流,保护服务不宕机。
SystemRule rule = new SystemRule();
// CPU 使用率阈值(生产推荐 0.7 ~ 0.8)
rule.setHighestCpuUsage(0.7);
// 负载阈值(4 核机器设 4)
rule.setHighestSystemLoad(4);
SystemRuleManager.loadRules(Collections.singletonList(rule));
四、生产环境代码使用方式
1. 注解方式(最简单,生产首选)
依赖:sentinel-annotation-aspectj
@RestController
public class OrderController {
/**
* value:资源名
* blockHandler:限流/熔断时的处理方法
*/
@SentinelResource(
value = "order:createOrder",
blockHandler = "createOrderBlockHandler"
)
@PostMapping("/order/create")
public Result createOrder(@RequestBody OrderDTO dto) {
// 业务逻辑
return Result.success(orderService.create(dto));
}
// 限流/熔断兜底方法(参数必须与原方法一致 + BlockException)
public Result createOrderBlockHandler(OrderDTO dto, BlockException e) {
return Result.fail("系统繁忙,请稍后再试!");
}
}
2. 原生代码方式(灵活控制)
try (Entry entry = SphU.entry("order:createOrder")) {
// 业务逻辑
return orderService.create(dto);
} catch (BlockException e) {
// 被限流/熔断
return Result.fail("流量过大,请稍后重试");
}
3. Feign 调用熔断(微服务必备)
开启配置:
feign:
sentinel:
enabled: true
Feign 接口:
@FeignClient(name = "pay-service", fallback = PayFallback.class)
public interface PayFeign {
@PostMapping("/pay/create")
Result createPay(PayDTO dto);
}
// 降级兜底类
@Component
public class PayFallback implements PayFeign {
@Override
public Result createPay(PayDTO dto) {
return Result.fail("支付服务繁忙,暂时不可用");
}
}
五、生产环境必须做:规则持久化
坑:默认规则存内存,服务重启丢失!
生产必须用 Nacos/Apollo 持久化(上面 yml 已配置)。
Nacos 配置示例(order-service-sentinel-flow.json):
[
{
"resource": "order:createOrder",
"grade": 1,
"count": 100,
"controlBehavior": 0
}
]
支持持久化的规则类型:
- flow:流控规则
- degrade:降级规则
- param:热点规则
- system:系统规则
- authority:黑白名单
六、生产环境 Sentinel 控制台部署(Dashboard)
1. 下载启动
# 下载
wget https://github.com/alibaba/Sentinel/releases/download/2.1.6/sentinel-dashboard-2.1.6.jar
# 启动(生产指定内存、端口、日志)
java -jar -Xms256m -Xmx256m \
--server.port=8858 \
--csp.sentinel.dashboard.server=localhost:8858 \
sentinel-dashboard-2.1.6.jar
2. 控制台功能
- 实时监控(QPS、RT、线程数、异常)
- 规则配置(流控 / 降级 / 热点 / 系统)
- 簇点链路(查看所有接口)
- 机器列表(查看在线服务实例)
生产建议:Dashboard 单独部署 2 台实例,保证高可用。
七、生产环境日志与问题排查
1. 日志目录
/data/logs/sentinel/
- metrics.log:实时监控日志(QPS/RT)
- record.log:规则变更日志
- block.log:被限流/熔断的日志(排查关键!)
2. 常用排查命令
# 查看被限流的接口
tail -f block.log | grep "order:createOrder"
# 查看监控指标
tail -f metrics.log
3. 常见问题
-
控制台看不到服务
- 检查
eager: true - 检查网络互通
- 检查 JVM 参数
-Dcsp.sentinel.app.name
- 检查
-
规则不生效
- 资源名是否一致
- 是否加了
@SentinelResource - 是否持久化配置错误
-
误限流
- 阈值设置太小
- 没有开启流控模式 - 关联 / 链路
- 系统规则 CPU 阈值过低
八、生产环境最佳实践(硬核总结)
1. 阈值设置原则
- 先压测,后配置:压测得出接口极限 QPS,配置为 80%
- 核心接口限流:下单、支付、登录
- 非核心接口降级:消息、统计、日志
2. 规则配置优先级
- 系统保护规则(全局兜底)
- 流控规则(QPS 限流)
- 熔断规则(下游依赖)
- 热点规则(防刷)
- 授权规则(黑白名单)
3. 高可用保障
- 规则持久化 Nacos
- Dashboard 集群部署
- 监控对接 Prometheus + Grafana
- 限流 / 熔断告警(企业微信 / 钉钉)
4. 业务兜底
- 限流返回标准化提示
- 熔断返回缓存 / 默认值
- 核心接口做重试 + 降级
九、完整生产项目结构
order-service/
├── pom.xml(sentinel 依赖)
├── application.yml(控制台 + Nacos 持久化)
├── controller/(@SentinelResource 注解)
├── feign/(Feign 熔断降级)
├── config/(Sentinel 系统规则配置)
└── fallback/(统一兜底类)
总结
这就是生产环境可直接落地的 Sentinel Java 实战全流程:
- 依赖 + 配置 快速接入
- 5 大核心规则 覆盖所有生产场景
- 注解 / Feign 极简使用
- Nacos 持久化 保证规则不丢失
- 控制台 + 日志 监控排查
- 最佳实践 避免踩坑
Sentinel 是生产环境服务稳定性的最后一道防线,配置得当能避免 90% 的服务雪崩、流量打挂问题。