- URL: https://mp.weixin.qq.com/s/lFuXVBUW_PkrBp4NoAFTig
- Added At: 2024-10-17 11:30:40
- Link To Text
本文介绍了基于sentinel的动态限流方案,通过参数优先级和实时流量动态调整限流阈值,解决现有限流方案的不足,实现更精细化、动态化的流量控制,保障核心场景可用性。
-
背景:
- 当前限流方案:使用公司vsentinel限流工具,包括QPS限流和热点参数限流。
- QPS限流:限制资源(接口/方法)的QPS/并发数。
- 热点参数限流:限制具体参数值的访问量。
- 存在的问题:
- 无法做到每个场景的精细化限流。
- 无法保证核心场景的可用性。
- 需要及时调整限流阈值,不易维护。
- 无法根据流量变化动态限流。
- 当前限流方案:使用公司vsentinel限流工具,包括QPS限流和热点参数限流。
-
动态限流介绍:
- 配置方式:配置每个参数的优先级,根据参数的优先级动态调整限流阈值。
- 实现原理:根据参数配置的优先级和实时流量,决定当前请求通过或拦截。
- 总结:动态限流本质上是参数优先级限流,支持对参数值配置优先级,根据参数值的优先级进行动态流控。
-
sentinel介绍:
- 原理:通过责任链模式实现不同模式的限流功能,责任链由一系列ProcessorSlot对象组成。
- 辅助资源指标数据统计的ProcessorSlot:
- NodeSelectorSlot:收集资源路径,树状存储调用路径。
- ClusterBuilderSlot:存储资源的统计信息和调用者信息。
- StatisticSlot:实现指标数据统计。
- 实现限流降级功能的slot:
- ParamFlowSlot:根据请求参数进行限流。
- SystemSlot:根据系统负载情况进行限流。
- AuthoritySlot:根据调用者身份进行限流。
- FlowSlot:根据QPS进行限流。
- DegradeSlot:实现熔断降级功能。
- 辅助资源指标数据统计的ProcessorSlot:
- 滑动窗口计数器算法:
- 计数器算法:维护一个固定单位时间的计数器来统计请求数。
- 滑动窗口计数器算法:将时间划分为细粒度的区间,每个区间维持一个计数器,多个区间组成一个时间窗口。
- 原理:通过责任链模式实现不同模式的限流功能,责任链由一系列ProcessorSlot对象组成。
-
基于sentinel的动态限流方案:
- 数据统计:使用滑动窗口计数器算法统计当前的流量。
- 规则管理:配置和管理限流规则,通过zk实现从后台到端上的同步。
- 流量校验:
- 参数临界点:找到限流阈值优先级的临界点。
- 细分窗口:将1s的窗口划分为N个更小的时间窗,近似计算1s的流量。
- 动态预测:用最近1s已有的统计数据预测当前窗口的请求是否需要限流。
- double check:使用细分窗口+动态预测方案,并通过check2保证被保护资源通过的总流量不超过阈值。
- 整体架构:复用sentinel责任链+SPI架构,使用独立SDK打包方式嵌入动态限流模板。
- 实现效果:通过监控查看各配置参数通过/拒绝的请求量,实现限流功能的可视化。
-
总结:
- 动态限流方案提供更细粒度、能够根据流量动态调整限流阈值的参数级限流方法,是对sentinel限流功能的补充和拓展。
- 对比sentinel的QPS限流,动态限流方案提供了更细粒度的参数级别的限流。
- 对比sentinel的热点参数限流,动态限流根据配置的参数优先级进行限流,限流的阈值参数会根据资源的流量动态调整,重点是“保核心”。