Sentinel
流控
-
资源名:唯一名称,默认请求路径
-
针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)
-
阈值类型/单机阈值:
-
QPS:(每秒钟的请求数量):当调用该api的QPS达到阈值的时候,进行限流
-
线程数:当调用该api的线程数达到阈值的时候进行限流
-
-
是否集群
-
流控模式:
-
直接:api达到限流条件时,直接限流
-
关联:当关联的资源达到阈值时,就限流自己
-
链路:只记录指定链路上的流量(指定资源从入口资源进来的流量,如果达到阈值,就进行限流)【api级别的针对来源】
-
-
流控效果
-
快速失败:直接失败,抛异常
-
Warm Up:根据codeFactor(冷加载因子,默认为3)的值,从阈值/codeFactor,经过预热时长,才达到设置的QPS阈值
-
排队等待:匀速排队,让请求以匀速的速度通过,阈值类型必须设置为QPS,否则无效
-
降级
- RT(平均响应时间):当1s内持续进入5个请求,对应时刻的平均响应时间(秒级)均超过阈值,那么在接下来的时间窗口之内,对这个方法的调用都会自动地熔断。注意Sentinel默认统计的RT上限是4900ms’,超出此阈值的都会算作4900ms,若需要变更此上线可以通过启动配置项-Dcsp.sentinel.statistic.max.rt=XXX来配置
- 异常比例 (
ERROR_RATIO
):当资源的每秒请求量>=5,并且每秒异常总数占通过量的比值超过阈值之后,资源进入降级状态,即在接下来的时间窗口之内,对这个方法的调用都会自动地返回 - 异常数 (
ERROR_COUNT
):当资源近1分钟的异常数目超过阈值之后会进行熔断。注意由于统计时间窗口是分钟级别的,若timeWindow小于60s,则结束熔断状态后仍可能再进入熔断状态
持久化
持久到Nacos
依赖:
implementation 'com.alibaba.csp:sentinel-datasource-nacos'
yml:
spring:
application:
name: gateway
cloud:
sentinel:
datasource:
ds1:
nacos:
server-addr: localhost:8848
dataId: gateway
groupId: DEFAULT_GROUP
data-type: json
rule-type: flow
nacos添加配置:
![image-20201231101454194](https://i-blog.csdnimg.cn/blog_migrate/fbcc8cdf1a6ed21954b596da5ed6eba9.png)
[
{
"resource":"/A",
"limitApp":"default",
"grade":1,
"count":1,
"strategy":0,
"controlBehavior":0,
"clusterMode":false
}
]
“resource”:资源名称
“limitApp”:来源应用
“grade”:阈值类型,0表示线程数,1表示QPS
“count”:单机阈值
“strategy”:流控模式,0表示直接,1表示关联,2表示链路
“controlBehavior”:流控效果,0表示快速失败,1表示Warm Up,2表示排队等待
“clusterMode”:是否集群