Sentinel 规则
2021年6月6日大约 3 分钟
流控规则
1. 流控模式
- 直接流控模式:最简单的模式,只要超过单机阈值就对资源名(接口 url)进行限流。
- 关联流控模式:需要设置资源名(例如/res1)和关联资源(例如/res2),若关联资源/res2 超过单机阈值,则/res1 被限流(res2 不会被限流)。
- 链路流控模式:当从某个接口过来的资源达到限流条件时,开启限流
2. 流控效果
- 快速失败:直接拒绝请求。
- Warm Up(预热):需设置预热时长(单位秒)
,假设为 5,则效果就是前五秒请求资源名时,单机阈值始终为 1,5 秒后,阈值恢复到正常值,即设定的值。(服务刚启动时,各个性能指标均未达到巅峰,此时不易处理过多的请求,这种情况就可以使用预热。打个比方,就好比早上刚起床,还比较困,但随着时间的推移,工作学习效率也逐渐提高了,能够处理更复杂的任务)。 - 排队等待:需设置预热时长(单位毫秒,假设为 300),当请求的资源超过单机阈值时,不会立马抛异常,会在 0.3 秒后再次请求该资源,若能调通,则不抛异常,否则抛出异常。
3. 阈值类型
- QPS(每秒查询率 Query Per Second) :每秒的响应请求数
- 线程数
降级规则
1. 资源名
2. 降级策略
- RT:单个请求的响应时间超过阈值,则进入准降级状态,接下来 1s 内连续 5 个请求响应时间均超过阈值,就进行降级,持续时间为时间窗口的值。
- 异常比例:一秒内请求数目大于 5 个且异常的请求数目在总请求数目的比例大于异常比例。
- 异常数:一分钟内异常的请求数目大于设置的异常数。
热点规则
是针对资源中的参数的控制,使用 LRU 算法,针对某些参数的值的峰值进行控制。需设置参数索引 注意:在方法上加@SentinelResource 才生效
授权规则
授权规则是对资源级别的控制,必须携带设定的某个参数并且该参数的值在白名单上才能放访问该资源,如果参数的值在黑名单上则不能访问该资源(需要编写配置类)
系统规则
系统保护规则是从应用级别的入口流量进行控制,从单台机器的总体 Load、RT、入口 QPS 、CPU
使用率和线程数五个维度监控应用数据,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。
系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量 (进入应用的流量) 生效。
- Load(仅对 Linux/Unix-like 机器生效):当系统 load1 超过阈值,且系统当前的并发线程数超过 系统容量时才会触发系统保护。系统容量由系统的
maxQps * minRt 计算得出。设定参考值一般 是 CPU cores * 2.5。 - RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。
- 线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。
- 入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。
- CPU 使用率:当单台机器上所有入口流量的 CPU 使用率达到阈值即触发系统保护。