目录
2.1 直接拒绝(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)
2.2 Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP 冷启动、预热)
2.3 匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
2.4 冷启动+匀速排队(RuleConstant.CONTROL_BEHAVIOR_W)
Sentinel支持多种保护规则:流量控制规则、降级熔断规则、系统保护规则、来源访问控制规则、热点参数规则
一、基于并发数和QPS的流量控制
1、并发数
并发数控制规则主要是用来防止业务线程耗尽,造成阻塞。对不同的业务逻辑使用不同线程池来隔离业务自身的资源争抢问题。但是这个问题也会造成线程数量过多带来的上下文切换问题,Sentinel并发线程数量就是统计当前请求的上下文线程数量,如果超出阈值,新的请求就会被拒绝
2、QPS
QPS (Queries Per Second) 每秒查询数,当QPS超过设置的阈值时,将会触发限流策略。
通过controllerBehavior属性设置
2.1 直接拒绝(RuleConstant.CONTROL_BEHAVIOR_DEFAULT)
默认设置方式,当请求超过阈值时,后续请求抛出FlowException
2.2 Warm Up(RuleConstant.CONTROL_BEHAVIOR_WARM_UP 冷启动、预热)
防止请求量突然增大时,瞬间将系统压垮;当收到大量请求时,系统并不是直接将QPS拉到最大值,而是在一定时间内逐步增加阈值
2.3 匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)
类似漏桶算法,严格控制请求通过的间隔时间,让请求匀速通过;
好处:可以处理间隔性突发流量
2.4 冷启动+匀速排队(RuleConstant.CONTROL_BEHAVIOR_W)
二、调用关系流量策略
调用关系包括调用方和被调用方,一个方法有可能是被调用方也有可能是调用方从而形成一个调用链。调用关系策略就可以根据不同维度的调用关系来触发流量控制
1、根据调用方限流
根据调用方来源进行流量控制,需要设置limitApp
- default:表示不区分来源,所有请求都会进行流量统计
- {some_origin_name}:设置特定的调用者,只有此调用者的请求才会进行流量统计
- other:针对{some_origin_name}以外的调用者发起的请求进行流量统计
当有多个控制策略时,优先级顺序:{some_origin_name} -> other ->default
2、根据调用链路入口限流
当一个资源有多个调用方时,可以根据某个入口进行流量统计,相当于根据调用方限流
3、具有关系的资源流量控制(关联流量控制)
两个资源存在依赖关系或者进行资源争抢时,其中一方过多占用资源会影响另一方的效率,用关联流量控制策略就可以限制过多占用资源的一方,来保证另一方的效率