以下是使用Sentinel控制台解决雪崩问题的详细步骤及数据监控方法:
一、安装Sentinel控制台
-
下载控制台JAR包
从GitHub官方仓库下载最新版本(示例为1.8.6):wget https://github.com/alibaba/Sentinel/releases/download/1.8.6/sentinel-dashboard-1.8.6.jar
-
启动控制台
通过以下命令启动(默认端口8080,可自定义):java -Dserver.port=8080 -Dsentinel.dashboard.auth.username=admin -Dsentinel.dashboard.auth.password=123456 -jar sentinel-dashboard-1.8.6.jar
- 默认账号密码:
sentinel/sentinel
,可通过参数自定义。
- 默认账号密码:
-
访问控制台
浏览器访问http://localhost:8080
,输入账号密码登录。
二、项目接入Sentinel控制台
-
添加依赖
在Spring Boot项目的pom.xml
中添加依赖:<!-- Sentinel核心依赖 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> <!-- 规则持久化(可选,需Nacos支持) --> <dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-datasource-nacos</artifactId> <version>1.8.6</version> </dependency>
-
配置控制台地址
在application.yml
中配置:spring: cloud: sentinel: transport: dashboard: localhost:8080 # 控制台地址 eager: true # 取消懒加载,启动即注册
三、配置熔断与流量控制规则
1. 熔断规则(解决雪崩问题)
- 配置示例:
在控制台的“熔断规则”页面设置:- 资源名:需保护的方法名(如
/order/get
) - 策略:慢调用比例(适用于雪崩场景)
- 最大RT(响应时间):200ms
- 比例阈值:0.5(50%请求超时则熔断)
- 熔断时长:5秒
- 最小请求数:5(触发统计的最小请求量)
- 资源名:需保护的方法名(如
2. 流量控制规则
- 配置示例:
- 资源名:接口路径(如
/user/login
) - 阈值类型:QPS(每秒请求数)
- 单机阈值:100(超过则限流)
- 流控效果:快速失败(直接返回错误)或排队等待(匀速通过)
- 资源名:接口路径(如
3. 规则持久化(推荐)
通过Nacos持久化规则,避免重启丢失:
- Nacos配置:
在Nacos中创建sentinel-flow
等配置文件,内容为JSON规则。 - 项目配置:
spring: cloud: sentinel: datasource: flow: nacos: server-addr: localhost:8848 data-id: sentinel-flow rule-type: flow
四、数据监控与效果验证
1. 实时监控
-
查看QPS/RT:
在控制台“实时监控”页面,查看各资源的QPS、响应时间、异常比例等指标。 -
簇点链路:
点击“簇点链路”,查看所有受监控的接口,直接针对资源配置规则。
2. 熔断触发验证
- 模拟慢调用:
在代码中设置延迟(如Thread.sleep(1000)
),触发慢调用比例熔断。 - 观察日志:
触发熔断后,请求会进入blockHandler
方法,返回自定义错误信息。
3. 流控触发验证
- 高并发测试:
使用工具(如JMeter)模拟高并发请求,观察是否触发限流(返回Blocked by Sentinel
)。
五、自定义异常处理
全局处理Sentinel的限流/熔断异常:
@RestControllerAdvice
public class SentinelExceptionHandler {
// 限流异常
@ExceptionHandler(FlowException.class)
public ResponseEntity<String> handleFlowException() {
return ResponseEntity.status(429).body("请求过多,请稍后再试");
}
// 熔断异常
@ExceptionHandler(DegradeException.class)
public ResponseEntity<String> handleDegradeException() {
return ResponseEntity.status(503).body("服务暂时不可用");
}
}
六、注意事项
- 规则生效时间:部分规则需首次访问接口后才会显示在控制台(懒加载机制)。
- 版本兼容性:确保Sentinel客户端与控制台版本匹配。
- 生产环境鉴权:通过Nacos或Sentinel控制台配置账号密码,避免未授权访问。
通过以上步骤,您可以有效配置熔断与流控规则,并通过控制台实时监控系统状态,从而解决雪崩问题。如需更复杂策略(如热点参数限流),可参考Sentinel官方文档扩展。