阿里sentinel

一、流控

  1. 限流:避免本资源被大量请求冲垮,故限流规则一般作用在生产者型资源上。
  • 流控模式:

直接:本资源上的流量触发规则后,阻塞本资源。

关联:关联资源是指与本资源无调用关系的其他资源,此时,若关联资源上的流量触发规则后,阻塞本资源【适用于本资源和关联资源都依赖相同的下游资源(如同一张数据库表),且关联资源为核心,资源为次核心,以达到舍车保帅,优先保障核心业务的目的】。

链路:入口资源是指本资源调用链路中的上游资源,此时,若本资源上的流量触发规则后,阻塞入口资源被保护【适用于本资源被多个重要程度不同的上游资源调用,此处的入口资源核心级低于其他入口资源,以达到舍车保帅,优先保障核心业务的目的】。

注意:入口模式依赖全局调用链路树,出于性能考虑,有些版本的sentinel默认收敛了所有调用链路的context,亦即不会生成全局的资源调用链路树,故要使用入口链路模式,就不要收敛context,app配置如下:
spring.cloud.sentinel.web-context-unify = false

  • 流控阈值类型:

QPS:单位时间内访问资源的的请求数。
并发线程数:同时访问该资源的线程数(如果是API接口型资源,就代表同一时间该接口上用以接收处理请求的线程数)。

  • 流控效果:

快速失败:针对超出阈值的那部分请求,直接调用blockHandler,快速返回。

WarmUp:【针对洪峰不频繁出现的激增流量】系统长时间处于低水位时,若流量突然拉高到高水位,可能瞬时将系统压垮。sentinel会给资源设置一个允许流量的初始值,即冷加载因子(coldFactor),默认为3,以这个初始值为起点接收的qps平滑增长,拉升过程中超出曲线的请求会被直接拒绝。经过预热时长后,平缓的拉升至设定阈值。后续超过流控阈值的请求被直接拒绝,防止瞬时峰形流量击垮系统(比如长时间未被访问,缓存需要预热,防止发生缓存击穿)。

排队等待:【针对频繁峰谷起伏的脉冲流量,利用等待机制将超出阈值的流量转移到波谷时期处理,达到销峰填谷的流量整形效果】给定一个超时等待的时间,当流量超过流控阈值时,超出部分的请求会超时地排队等待被接收,超时则直接失败返回。

  1. 热点参数限流:保护数据型资源不被大流量冲垮,故规则作用在与数据型资源有关联的参数上,通常这种接口同时承载能热数据。
    热门商品深夜冷却,缓存失效,次日八点访问量激增,而缓存又未预热,极易击垮DB层。
    被识别为暴力碰撞的数据,将他们分离出来做流控,防止她们连累其他普通数据。

参数索引:目标参数,在方法签名中的索引。
单机阈值:阈值QPS。
统计时长:统计时间窗口长度。

注意:热点参数限流的配置分为两部分,主配置 + 参数例外项:其中主配置用于控制大多数取值的流控阈值,例外项则可以挑选个别取值单独流控。
哪一块该配高QPS,哪一块该配低QPS,应该结合场景和配置工作量灵活应用。

  1. ACL授权限流:通过设置消费者黑、白名单,过滤部分消费者的请求,达到资源保护的目的,故规则作用于生产者型资源上。

二、降级

  1. 熔断:熔断是服务降级的一种极端形式,避免本资源受下游非健康资源的连累,故熔断规则一般作用在消费者型资源上(比如遇到下游出现慢调用、抛异常时就采用降级或熔断)。
  • 降级模式:

慢调用比例
最大RT:界定慢调用的时间阈值。
最小请求数:一次统计内的最小请求数。
比例阈值:慢调用次数触发熔断的百分比阈值。
熔断时长:触发熔断后,熔断效果持续时长。

异常比例
最小请求数:一次统计内的最小请求数。
比例阈值:异常次数触发熔断的百分比阈值。
统计时长:一次统计的持续时长。
熔断时长:触发熔断后,熔断效果持续时长。

异常数
最小请求数:一次统计内的最小请求数。
异常数:一次统计内异常次数阈值。
统计时长:一次统计的持续时长。
熔断时长:触发熔断后,熔断效果持续时长。

  • 降级效果:

提供Fallback逻辑

返回自定义错误Result

读缓存:主要有DB访问降级。

注意:熔断时间超时后,熔断效果将进入半开启状态,半开启状态下,若第一次请求就是慢调用或异常,不需要其他条件,资源将直接进入下一个熔断期;
半开启状态没有超时时间,若其下的第一次调用为慢调用或异常就又熔断,否则结束半开启状态,完全解除熔断。

三、系统保护

  1. 操作系统级保护:在Load、RT、线程数、入口QPS、CPU使用率,几个维度上来保护整个生产者型App,规则作用于整个App。

1.应用容量评估不到位,或者某个大流量接口未配置限流、或限流不合理,导致系统崩溃,来不及处理。
2. 系统负载或资源占用突然飙升,无法快速定位原因,来不及处理。
3. 某个节点不可用了,其原有负载被分配给了其他节点,导致节点雪崩。
4. 即使流量峰谷很难描述、容量难评估、规则很难配置、依赖很难梳理,也希望有一个全局性的兜底防护,即使缺乏容量评估也能有保障。

Load:仅对Unix-Like系统生效,以系统的load1作为触发指标,进行自适应保护。当系统load1超过阈值,且当前并发线程数超过估系统算容量时才会触发保护(BBR阶段),系统容量可由~maxQps * minRt~公式估算得出。
设定值一般为cpu核数的2.5倍。
RT:单台机器上,所有入口流量的平均延时超过阈值,将触发保护。
线程数:单台机器上,所有入口流量的并发线程数超过阈值,将触发保护。
入口QPS:单台机器上,所有入口流量的QPS超过阈值,将触发保护。
CPUs使用率:当系统cpu使用率超过阈值,将触发保护,很灵敏。

posted @ 2022-06-10 15:10  JaxYoun  阅读(213)  评论(0编辑  收藏  举报