Sentinel流量控制与规则配置
Sentinel控制台核心功能
Sentinel控制台提供流量控制、熔断降级、热点参数限流、系统自适应保护和授权规则等关键功能。
控制台安装与启动
下载地址
Sentinel控制台发布地址:https://github.com/alibaba/Sentinel/releases
请根据需求选择合适的版本下载。
启动命令
java -Dserver.port=8080 \
-Dcsp.sentinel.dashboard.server=localhost:8080 \
-Dproject.name=sentinel-dashboard \
-jar sentinel-dashboard-{version}.jar
启动后访问localhost:8080,使用默认账号sentinel/sentinel登录。
初始登录后左侧菜单仅显示默认选项,需要客户端接入后才能发现监控实例。
Spring Cloud客户端集成
1. 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
2. 创建控制器
package com.example.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AuthController {
@GetMapping("/auth")
public String authenticate() {
System.out.println("Authentication request");
return "auth_success";
}
@GetMapping("/log")
public String logging() {
System.out.println("Logging request");
return "log_success";
}
}
3. 配置文件
server:
port: 9000
spring:
application:
name: auth-service
cloud:
sentinel:
transport:
port: 8719
dashboard: localhost:8080
spring.cloud.sentinel.transport.dashboard配置控制台地址,spring.cloud.sentinel.transport.port配置客户端通信端口。
启动应用并访问端点后,控制台将自动发现服务实例。
在簇点链路中可以查看监控的请求端点。
核心概念解析
1. 资源
资源的唯一标识符,Spring Boot项目中默认为控制器请求路径,也可通过@SentinelResource注解自定义。
2. 阈值类型
- QPS:每秒请求数限制
- 线程数:并发线程数限制
3. 流控模式
- 直接模式:达到阈值直接限流
- 关联模式:关联资源达到阈值时限流当前资源
- 链路模式:基于调用链路关系限流
4. 流控效果
- 快速失败:直接返回失败响应
- Warm Up:冷启动预热模式
- 排队等待:匀速通过请求
QPS直接限流示例
配置QPS阈值为1,当每秒请求超过1次时直接限流。
测试时快速连续请求将触发限流,返回"Blocked by Sentinel (flow limiting)"。
线程数限流示例
@GetMapping("/auth")
public String authenticate() throws InterruptedException {
System.out.println("Processing authentication");
Thread.sleep(1000);
return "auth_success";
}
配置线程数阈值为1,当并发线程超过限制时触发限流。
关联限流模式
配置当/log端点QPS超过2时,限流/auth端点。
使用测试工具对/log端点进行高频访问,观察/auth端点的限流效果。
预热模式配置
Warm Up模式允许系统在低流量期后逐渐适应流量增长。
初始阶段阈值从10/3开始,经过10秒预热期逐渐升至完整阈值10。