这是我参与8月更文挑战的第6天,活动详情查看: 8月更文挑战
分布式限流框架Sentinel流量控制策略
调用关系流量策略
调用关系包含调用者和被调用者,一个方法可能又调用其他方法,形成一条完整的调用链。而调用关系流量策略,就是用不同的调用维度来控制。
- 根据调用方限流
- 根据调用链路入口限流
- 具有关系的资源流量控制
调用方限流
根据请求来源进行流量控制,可设置limitApp属性来设置来源信息,而它有三个选项
- default:不区分调用者,任何访问调用者的请求都会进行限流统计
- some_origin_name:设置特定的调用者,只有被设置的指定调用者的请求都会进行限流统计
- other:针对除了some_origin_name外的其他调用者进行流量控制
同一个资源可配置多条规则,如果多个规则设置的limitApp不一样,规则生效的顺序为some-origin_name->other->default
根据调用链路入口限流
一个被限流保护的方法,可能来自不同的调用电路,比如针对一个资源,请求入口A和请求入口B都调用该资源,Sentinel允许只根据某个入口进行限流统计,比如针对资源,设置针对请求入口A的调用才会统计请求次数,它在一定程度类似于调用方限流
关联流量控制
当两个资源之间存在依赖关系或者存在竞争时,则这两个资源存在关联,这两个存在依赖关系的资源在相关调用时,存在一个资源执行操作过于频繁而影响另外一个资源的执行效率。因此,关联流量控制是要限制其中一个资源的执行流量。
服务熔降级有以下几种参考指标
- 平均响应时间:比如5s内持续进入25个请求,对应时刻的平均响应时间超过阈值,在接下来的固定时间窗口内,对该方法的访问都会自动熔断。
- 异常比例:某个方法每秒调用所获得的异常总数的比例超过设置的阈值,该资源会自动进入降级状态,在固定时间窗口内,对该方法的调用会自动熔断。
- 异常数量:某个方法在指定时间窗口内获得的异常数量超过阈值时,会自动熔断