Sentinel
# 流控模式
直接:统计当前资源的请求,触发阈值时对当前资源直接限流,也是默认的模式;
关联:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流;
A触发阈值,对B限流;
链路:统计从指定链路访问到本资源的请求,触发阈值时,对指定链路限流;
A,B都要访问C,只统计从A到C的链路;
# 流控效果
流控效果是指请求达到流控阈值时应该采取的措施,包括三种:
快速失败:达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。是默认的处理方式;
warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值;
应对冷启动方案,请求阈值初始值是threshold/coldFactor,持续到指定时长后,达到threshold值,coldFactor默认3;
例如,设置QPS的threshold为10,预热时间为5秒,那么初始阈值就是10/3,也就是3,然后在5秒后逐渐增长到10;
排队等待:让所有的请求按照先后次序排队执行,两个请求的间隔不能小于指定时长;
流量整形;
# Sentinel限流与Gateway限流区别?
Gateway采用了基于Redis实现的令牌桶算法;
Sentinel限流有三种:
默认限流模式:基于滑动窗口算法;
排队等待:漏桶算法;
所有请求进入一个队列,按照阈值允许的时间间隔依次执行。并发多个请求必须等待,预期等待时长=最近依次请求的预期等待时间+允许的间隔。
第一个请求等待为0,如果QPS=5,意味着200ms处理一个请求,第二个请求200ms被执行,第三个400ms......,预期等待超过2000ms的请求会被拒绝并抛出异常;
热点参数:令牌桶算法;