Sentinel 实现自适应限流(Adaptive Flow Control)的核心原理和流程如下:
-
自适应限流算法:
- Sentinel 采用了基于滑动窗口统计的自适应限流算法。不同于传统的固定阈值限流,自适应限流会根据系统的实际运行情况动态调整限流阈值。
- 核心思路是:系统资源在不同时间段内有不同的处理能力,通过统计一段时间内的平均响应时间来判断当前系统的繁忙程度,并据此动态调整 QPS 的阈值。
-
统计与计算:
- Sentinel 通过
Metric
模块收集并统计资源的响应时间数据,包括 RT(响应时间)、线程数等信息。 - 当请求到达时,首先经过
SystemRuleSlot
对系统规则进行检查。其中自适应限流规则会依据过去一段时间(如1分钟)内所有资源的平均RT与预设的基线RT对比,若系统整体压力较大,则降低限流阈值;反之则提高阈值。
- Sentinel 通过
-
实时调整与控制:
- Sentinel 自适应限流策略实时地对系统负载情况进行监控,并实时调整限流阈值。这种动态调整机制能够有效防止系统过载,同时最大化地利用系统资源。
- 当计算出新的阈值后,会在 Sentinel 的内部实现中更新对应资源的限流规则。
-
降级与保护:
- 如果系统整体压力持续上升导致自适应限流阈值降低到一定程度,可能触发系统保护模式(System Protect),即对所有资源施加一个统一的限流阈值,以保护整个系统不因某个热点资源而崩溃。
-
通知与反馈:
- Sentinel 在执行限流操作时,会生成相应的事件并通过事件总线传递给监听器。开发者可以通过监听这些事件,了解限流状态的变化以及阈值的动态调整情况。
综上所述,Sentinel 自适应限流通过实时分析系统的负载状况,灵活调整限流阈值,实现了对系统资源的高效保护。源码层面主要涉及 SystemRule
、SystemRuleManager
、SystemRuleSlot
等模块的逻辑实现。