限流算法对比指南
目的: 帮助您快速选择合适的限流算法
更新: 2026-02-05
📚 目录
- 📊 快速对比
- 1. 滑动窗口 (Sliding Window)
- 2. 固定窗口 (Fixed Window)
- 3. 令牌桶 (Token Bucket)
- 4. 漏桶 (Leaky Bucket)
- 5. 令牌桶 vs 漏桶
- 6. 选择决策树
- 7. 实战推荐配置
- 8. 性能对比维度(10000个用户)
- 9. 常见问题
- 10. 相关文档
📊 快速对比
1. 滑动窗口 (Sliding Window)
适用场景
✅ 强烈推荐:
- API限流(RESTful API)
- 登录保护(防暴力破解)
- 敏感操作(修改密码、支付等)
- 需要精确控制的场景
❌ 不推荐:
- 超高并发场景(内存开销大)
- 允许短时突发的场景
配置示例
核心特点
工作原理
优缺点
✅ 优点:
- 最精确的限流控制
- 无窗口边界问题
- 公平性最好
- 推荐作为默认算法
❌ 缺点:
- 内存占用较高(需要存储所有时间戳)
- 计算开销稍大(需要过滤数组)
- 不允许突发流量
2. 固定窗口 (Fixed Window)
适用场景
✅ 推荐:
- 高并发场景(具体吞吐需压测确认)
- 对精度要求不高的场景
- 内存受限的环境
❌ 不推荐:
- 需要精确限流的场景
- 严格的安全控制(如登录保护)
配置示例
核心特点
工作原理
优缺点
✅ 优点:
- 计算最快(O(1))
- 内存占用最低
- 实现简单
❌ 缺点:
- 窗口边界有突发问题(可能2倍超频)
- 不符合"任意60秒"的语义
- 不公平(边界时刻的用户可以发更多请求)
3. 令牌桶 (Token Bucket)
适用场景
✅ 强烈推荐:
- API网关
- 允许短时突发的场景
- 批量操作(如批量导入)
- 用户体验要求高的场景
❌ 不推荐:
- 不能接受突发流量的场景
- 需要严格限制的场景(如登录)
配置示例
核心特点
工作原理
优缺点
✅ 优点:
- 允许突发流量(用户体验好)
- 平均速率控制严格
- 内存占用低
- 适合API网关
❌ 缺点:
- 可能瞬间消耗所有令牌
- 配置相对复杂(需要理解capacity和refillRate)
- 不适合严格限制的场景
4. 漏桶 (Leaky Bucket)
适用场景
✅ 强烈推荐:
- 流量整形(平滑流量)
- 保护后端系统
- 需要恒定输出速率的场景
- 消息队列限流
❌ 不推荐:
- 允许突发的场景
- 用户体验要求高的场景
配置示例
核心特点
工作原理
优缺点
✅ 优点:
- 平滑流量(输出速率恒定)
- 削峰填谷
- 保护后端系统
- 内存占用低
❌ 缺点:
- 不适合突发场景
- 用户体验稍差(感觉"慢")
- 配置相对复杂
5. 令牌桶 vs 漏桶
很多人容易混淆这两个算法,这里详细对比:
实际场景对比
6. 选择决策树
7. 实战推荐配置
登录保护
API网关
消息队列
高并发API
8. 性能对比维度(10000个用户)
以下是算法层面的相对特征,具体 QPS/延迟请以可复现 benchmark 或生产压测为准。
9. 常见问题
Q1: 默认算法是什么?
A: 滑动窗口(sliding-window)
滑动窗口是最精确、最公平的算法,推荐作为默认选择。
Q2: 什么时候用固定窗口?
A: 仅在以下情况:
- 超高并发(具体吞吐需压测确认)
- 内存非常受限
- 可以接受窗口边界的2倍超频
Q3: 令牌桶和漏桶如何选择?
A:
- 用户体验优先 → 令牌桶(允许突发)
- 后端保护优先 → 漏桶(平滑流量)
Q4: 可以切换算法吗?
A: 可以,只需修改 algorithm 配置:
10. 相关文档
📚 相关文档
深入分析:
- 📖 算法深度分析 - 源码级分析、瞬时超频计算
应用配置:
返回:
- 📖 文档中心 - 查看所有文档和学习路径
最后更新: 2026-02-05
维护者: AI Assistant