限流算法可视化图解

Rate Limiting vs Concurrency Limiting — 四大经典算法的工作原理与核心差异

四种 Rate Limiting 算法

固定窗口 有边界问题

把时间切成固定格子,每格独立计数。简单粗暴,但窗口交界处可能通过 2 倍流量

滑动窗口(加权) 平滑过渡

在固定窗口基础上,用加权估算消除边界跳变:旧窗口按剩余比例衰减,而非一次性清零。

漏桶 匀速输出

请求进入队列(桶),以恒定速率处理。不管来得多快,出去永远匀速。桶满则拒绝。

令牌桶 允许突发

以固定速率往桶里放令牌,请求需取令牌才放行。空闲时令牌会积攒,允许短时突发。

核心对比 交互

场景:限制 10 QPS,子窗口 200ms。10 个请求集中在 [800ms, 1000ms] 到达。观察子窗口被踢出时,两种方案的容量恢复方式。

t = 0.000s
方案A:细分固定窗口(阶跃) 方案B:细分 + 加权估算(渐变) 请求到达

核心区别:方案 A 在子窗口被踢出的瞬间,容量从 0 阶跃到 10;方案 B 用加权让旧窗口的计数线性衰减,容量逐步释放。代价只是一次乘法。

总结

固定窗口
最简单
有边界 2x 问题
滑动窗口
加权估算
平滑无跳变
漏桶
匀速输出
不允许突发
令牌桶
攒令牌
允许突发