一、安装
- 下载
Sentinel下载地址 - 安装
java -jar sentinel-dashboard-1.7.0.jar
3.访问 localhost:8080
二、配置
1.搭建项目
- 引入maven依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>
<!--持久化 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
- 配置yml
server:
port: 8401
spring:
application:
#服务实例名称
name: cloudalbaba-sentinel-service
cloud:
nacos:
discovery:
#nacos服务地址
server-addr: 192.168.252.101:1111
sentinel:
transport:
# 配置sentinel dashboard地址
dashboard: localhost:8080
# 默认8719端口,假如被占用会自动从8719开始一次+1扫描,直到找到未被占用的端口
port: 8719
- 启动类添加注解
@SpringBootApplication
@EnableDiscoveryClient - 请求任意接口刷新sentinel dashboard
2.流控
- 流控规则
点击sentinel dashboard页面的流控规则,新增流控规则,设置阈值类型、阈值
阈值类型:
QPS:每秒钟请求数量,当达到阈值时限流
线程数:处理请求的线程数,当调用该api的线程达到阈值时限流-
流控模式
- 直接:接口达到限流条件时,开启限流
- 关联:当关联的资源达到限流条件时,开启限流,适合做应用让步。例如为一个查询的接口添加关联流控,关联 资源为一个更新的接口,当更新的接口达到阈值时,开启查询接口的限流,为更新接口让步服务器资源。
- 链路:当从某个接口过来的资源达到限流条件时,开启限流
-
流控效果
- 快速失败
- Warm Up(预热)
当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮,通过预热让流量缓慢增加,在一定时间内逐渐增加到阈值,避免系统压垮。- 公式:阈值除以coldFactor(冷加载因子,默认值3),经过预热时长后才会达到阈值
-
排队等待
严格控制请求请求通过的时间间隔,让请求通过均匀速度通过,对应漏桶算法。用于处理间隔突发流量
-
- 降级规则(没有半开状态)
- RT(平均响应时间,秒级)
平均响应时间 超出阈值且QPS>=5,两个条件同时满足后触发降级,窗口期后关闭断路器
RT最大4900(更大设置 -Dcsp.sentinel.statistic.max.rt=xxx)
异常比例(秒级)
QPS>=5 且异常比例(秒级统计)超过阈值时,触发降级;时间窗口期结束后,关闭降级
异常数(分钟级)
异常数(分钟统计)超过阈值,触发降级;时间窗口期结束后,关闭降级,设置时时间窗口大于60秒
- RT(平均响应时间,秒级)
- 热点规则
请求SentinelResource指定的api名称的指定参数,达到QPS开启断路器,时间窗口期后关闭断路器- 参数例外项
当参数为指定类型时,使用例外配置的规则
- 参数例外项
- 系统规则(入口级别,粗粒度)
- LOAD
- RT
- 线程数
- 入口QPS
- CUP使用率
3.@SentinelResource
不支持private方法
value:名称
fallback处理运行异常,blockHandler处理流控配置
blockHandler:降级方法
blockHandlerClass:降级类
blockHandlerClass,blockHandler:指定降级类中的降级方法
exceptisToIgnore:忽略多个异常
与openFeign整合
增加配置
#激活Sentinel对feign的支持
feign:
sentinel:
enabled: true
4.持久化
将限流规则持久化到nacos
- 添加maven依赖
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.配置yml
spring:
application:
#服务实例名称
name: cloudalibaba-sentinel-service
cloud:
nacos:
discovery:
#nacos服务地址
server-addr: 192.168.252.101:1111
sentinel:
transport:
# 配置sentinel dashboard地址
dashboard: localhost:8080
# 默认8719端口,假如被占用会自动从8719开始一次+1扫描,直到找到未被占用的端口
port: 8719
datasource:
dsl:
nacos:
server-addr: 192.168.252.101:1111
dataId: cloudalibaba-sentinel-service
data-type: json
rule-type: flow
- nacos配置流控规则