windows jar文件夹cmd启动
-java jar sentinel-dashboard-1.8.1.jar
sentinel:雪崩、服务熔断、服务限流、秒杀、削峰填平
sentinel采用的懒加载说明,需要你执行一次访问即开始监控(例如:http://localhost8401/testA)
资源名:唯一名称,默认就是请求路径
针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default( 不区分来源 )
sentinle监控nacos
server:
port: 8401
spring:
application:
name: one-sentinel-text
cloud:
nacos:
discovery:
#服务注册中心位置
server-addr: localhost:8848
sentinel:
transport:
#配置sentinel dashboard地址 sentinel启动端口号为8080 8080监控8401
dashboard: localhost:8080
# 默认端口号为8719,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口 ,8719和nacos用于交互
port: 8719
management:
endpoint:
web:
exposure:
include: '*'
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-sentinel-datasource</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
阈值类型/单机阈值 :
1.QPS(每秒钟的请求数量)一个人做很多件事情(串行),当调用该api的QPS达到阈值的时候,进行限流,如阈值等于1(1秒只有一个并发量,如果为100那么每秒有100个并发量)并且为快速失败请求路径的频率超过每1秒时就会抛出异常报错
2.线程数:(很多人做一件事情(并行))当调用该api的线程数达到阈值的时候,进行限流,如阈值等于1并且为快速失败时,那么大于一个请求路径同时访问时可能就会报错抛出异常
是否集群:不需要集群
流控模式:
1.直接(默认):api达到限流条件时,直接限流
2.关联:当关联的资源达到阈值时,就限流自己(当与A关联的资源B达到阈值时,就会限流A自己;B惹事,A挂了),防止连坐效应
3.链路:只记录指定链路上的流量(两个点之间的所有资源都会失败)(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
要添加配置web-context-unify:false,表示要将调用链路收敛,true会导致链路流控效果无效
假如5秒内,10次请求6次错误,就会熔断,响应错误信息,可能等个5秒又会恢复链路
流控是因为流量大限制,降级熔断是内部错误,两者互相不影响
链路与直接的区别:直接对客户端没有要求,都会约束;链路只对上级接口约束
流控效果:
1.快速失败:直接失败,抛异常
2.Warm Up: 根据codeFactor(冷加载因子,默认3)的值,从阈值codeFactor,经过预热时长,才达到设置的QPS阈值
案例,阈值为10+预热时长设置5秒 系统初始化的阈值为10/3约等于3,即阈值刚开始为3;然后过了5秒后阈值才慢慢升高恢复到10
初始时QPS>实际阈值(=阈值/3)的时候就直接失败,后续实际阈值逐渐调整到设置阈值
作用:秒杀系统在开启的瞬间,会有很多流量上来,很有可能把系统打死,预热方式就是为了保护系统,慢慢的把流量放进来,慢慢的把阈值增长到设置的阈值
3.排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效
可以当作队列来理解,阈值为2,理解为同一时间读取队列中2个元素,若是一个元素处理完,读取下一个元素,剩下的元素如果在队列中等待的时间超过了timeout,就会限流打回
RT( 平均响应时间,秒级)
1.平均响应时间超出阈值且在时间窗口内通过的请求>=5,两个条件同时满足后触发降级
2.窗口期过后关闭断路器
3.RT最大4900(更大的需要通过-Dcsp.sentinel.statistic.max.rt=XXXX才能生效)
异常比例(秒级)
QPS>=5且异常比例(秒级统计)超过阈值时,触发降级;时间窗口结束后,关闭降级
异常数(分钟级)
异常数(分钟统计)超过阈值时,触发降级;时间窗口结束后,关闭降级
熔断
1.1秒内请求默认最小5个请求,当请求达到阈值5且请求超时则触发熔断
2.异常比例,同1秒内5个请求,达到阈值且异常比例达到则触发熔断
3.异常数1秒内异常数达到阈值触发,时间窗口>60s
熔断就是无法访问,降级就是“系统繁忙稍后再试”
熔断降级
Sentinel熔断降级会在调用链路中某个出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制让请求快速失败,避免影响到其他的资源而导致级别错误
当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出DegradeException)。
正常的降级之前是会走原本的接口;但是熔断是不调用原本接口,不管对错直接进降级。
系统规则
系统规则是从应用级别的入口流量进行控制,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
系统保护规则是应用整体维度的,而不是资源维度的,并且只对入口流量生效,入口流量指的是进入应用的流量(EntryType.IN),比如Web服务或Dubbo服务端接收的请求,都属于入口流量。
支持的模式:
1.load自适应(只对Linux/Unix-like机器生效):系统的load1作为启发指标,进行自适应系统保护。当load1超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR阶段)。系统容量由系统的maxQps*minRt估算得出,设定参考值一般是CPU core*2.5
2.CPU usage(1.5.0+版本):当系统CPU使用率超过阈值即触发系统保护(取值范围0.0-1.0),比较灵敏。
3.平均RT:当单台机器上所有入口流量的平均RT达到阈值即触发保护系统,单位是毫秒(ms)
4.并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护
5.入口QPS:当单台机器上所有入口流量的QPS达到阈即触发系统保护