在 Alibaba Sentinel 中,限流(Flow Control)的设计非常精妙,它将 “统计” 和 “控制” 进行了分离。 简单来说,Sentinel 底层的请求计数统一采用“滑动时间窗口”算法,而在面对超出阈值的流量时采取的管控策略(流控效果),则借鉴了“令牌桶”和“漏桶”算法的思想。 以下是 Sentinel 中涉及的三大核心限流算法及对应机制的详细解析: --- 1. 滑动时间窗口算法(Sliding Time Window)—— 核心统计基础 在 Sentinel 中,所有的流量数据(如通过的 QPS、拒绝的 QPS、响应时间等)都是基于滑动时间窗口来统计的。 实现机制: 数据结构 Sentinel 在底层实现了一个叫 的环形数组。它将一段时间(例如 1 秒)划分为多个极短的时间窗(Window Wrap / 样本窗口)。 默认情况下,Sentinel 设定 1 秒作为一个滑动窗口(Interval),内部划分为 2 个时间跨度为 500ms 的样本窗口(Sample Count = 2)。 随着时间的推移,当前时间指针向前滑动,废弃掉过期的时间窗,并创建一个新...