阿里sentinel
一、流控
- 限流:避免本资源被大量请求冲垮,故限流规则一般作用在生产者型资源上。
- 流控模式:
直接:本资源上的流量触发规则后,阻塞本资源。
关联:关联资源是指与本资源无调用关系的其他资源,此时,若关联资源上的流量触发规则后,阻塞本资源【适用于本资源和关联资源都依赖相同的下游资源(如同一张数据库表),且关联资源为核心,资源为次核心,以达到舍车保帅,优先保障核心业务的目的】。
链路:入口资源是指本资源调用链路中的上游资源,此时,若本资源上的流量触发规则后,阻塞入口资源被保护【适用于本资源被多个重要程度不同的上游资源调用,此处的入口资源核心级低于其他入口资源,以达到舍车保帅,优先保障核心业务的目的】。
注意:入口模式依赖全局调用链路树,出于性能考虑,有些版本的sentinel默认收敛了所有调用链路的context,亦即不会生成全局的资源调用链路树,故要使用入口链路模式,就不要收敛context,app配置如下:
spring.cloud.sentinel.web-context-unify = false
- 流控阈值类型:
QPS:单位时间内访问资源的的请求数。
并发线程数:同时访问该资源的线程数(如果是API接口型资源,就代表同一时间该接口上用以接收处理请求的线程数)。
- 流控效果:
快速失败:针对超出阈值的那部分请求,直接调用blockHandler,快速返回。
WarmUp:【针对洪峰不频繁出现的激增流量】系统长时间处于低水位时,若流量突然拉高到高水位,可能瞬时将系统压垮。sentinel会给资源设置一个允许流量的初始值,即冷加载因子(coldFactor),默认为3,以这个初始值为起点接收的qps平滑增长,拉升过程中超出曲线的请求会被直接拒绝。经过预热时长后,平缓的拉升至设定阈值。后续超过流控阈值的请求被直接拒绝,防止瞬时峰形流量击垮系统(比如长时间未被访问,缓存需要预热,防止发生缓存击穿)。
排队等待:【针对频繁峰谷起伏的脉冲流量,利用等待机制将超出阈值的流量转移到波谷时期处理,达到销峰填谷的流量整形效果】给定一个超时等待的时间,当流量超过流控阈值时,超出部分的请求会超时地排队等待被接收,超时则直接失败返回。
- 热点参数限流:保护数据型资源不被大流量冲垮,故规则作用在与数据型资源有关联的参数上,通常这种接口同时承载能热数据。
热门商品深夜冷却,缓存失效,次日八点访问量激增,而缓存又未预热,极易击垮DB层。
被识别为暴力碰撞的数据,将他们分离出来做流控,防止她们连累其他普通数据。
参数索引:目标参数,在方法签名中的索引。
单机阈值:阈值QPS。
统计时长:统计时间窗口长度。
注意:热点参数限流的配置分为两部分,主配置 + 参数例外项:其中主配置用于控制大多数取值的流控阈值,例外项则可以挑选个别取值单独流控。
哪一块该配高QPS,哪一块该配低QPS,应该结合场景和配置工作量灵活应用。
- ACL授权限流:通过设置消费者黑、白名单,过滤部分消费者的请求,达到资源保护的目的,故规则作用于生产者型资源上。
二、降级
- 熔断:熔断是服务降级的一种极端形式,避免本资源受下游非健康资源的连累,故熔断规则一般作用在消费者型资源上(比如遇到下游出现慢调用、抛异常时就采用降级或熔断)。
- 降级模式:
慢调用比例:
最大RT:界定慢调用的时间阈值。
最小请求数:一次统计内的最小请求数。
比例阈值:慢调用次数触发熔断的百分比阈值。
熔断时长:触发熔断后,熔断效果持续时长。
异常比例:
最小请求数:一次统计内的最小请求数。
比例阈值:异常次数触发熔断的百分比阈值。
统计时长:一次统计的持续时长。
熔断时长:触发熔断后,熔断效果持续时长。
异常数:
最小请求数:一次统计内的最小请求数。
异常数:一次统计内异常次数阈值。
统计时长:一次统计的持续时长。
熔断时长:触发熔断后,熔断效果持续时长。
- 降级效果:
提供Fallback逻辑:
返回自定义错误Result:
读缓存:主要有DB访问降级。
注意:熔断时间超时后,熔断效果将进入半开启状态,半开启状态下,若第一次请求就是慢调用或异常,不需要其他条件,资源将直接进入下一个熔断期;
半开启状态没有超时时间,若其下的第一次调用为慢调用或异常就又熔断,否则结束半开启状态,完全解除熔断。
三、系统保护
- 操作系统级保护:在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使用率超过阈值,将触发保护,很灵敏。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2021-06-10 UML中依赖、关联、聚合、组合
2020-06-10 禁用Chrome安全策略,以允许跨域