无需登录 数据私有 本地保存

API 速率限制模拟器 - 令牌桶与漏桶算法可视化

13
0
0
0

API 速率限制模拟器

可视化对比令牌桶漏桶两种经典速率限制算法,直观理解突发流量处理与流量整形的核心差异。

令牌桶 Token Bucket
已处理: 0 已拒绝: 0 令牌: 0/20
漏桶 Leaky Bucket
已处理: 0 已拒绝: 0 队列: 0/20
1 5 30
5 20 60
1 5 30
5 20 60
5/秒
请求事件日志
最近50条记录 · 绿色=处理 · 红色=拒绝
暂无请求记录,点击上方按钮发送请求
常见问题与知识点
什么是令牌桶算法(Token Bucket)?

令牌桶算法是一种经典的流量整形与速率限制算法。系统以固定速率向桶中添加令牌,桶有最大容量限制。每当请求到达时,需要从桶中取出一个令牌才能被处理;如果桶中无令牌,请求被拒绝或延迟。

核心特点:允许突发流量——在流量低谷期,令牌可以在桶中积累(最多到桶容量),当突发流量到来时可以一次性消耗大量令牌,从而允许短时间内的高吞吐量。这使得令牌桶非常适合需要处理间歇性突发请求的API场景。

典型应用:AWS API Gateway限流、Nginx limit_req模块(结合burst参数)、Google Cloud Endpoints等。

什么是漏桶算法(Leaky Bucket)?

漏桶算法将请求视为水滴,请求到达时进入一个固定容量的桶(队列),然后以恒定速率从桶底"漏出"被处理。如果桶已满,新到达的请求(水滴)会被直接丢弃。

核心特点:严格平滑输出流量——无论输入流量多么波动,输出速率始终保持恒定。它不允许多余的突发,是一种流量整形的强制手段。这使得漏桶适合需要严格保证下游系统不被突发流量冲击的场景。

典型应用:网络流量整形(QoS)、ISP带宽控制、视频流传输速率控制、某些API网关的严格限流策略。

令牌桶 vs 漏桶:核心区别是什么?
对比维度令牌桶漏桶
突发流量✅ 允许(积累令牌)❌ 不允许(强制平滑)
输出特征可突发,平均速率受控恒定速率,完全平滑
流量整形宽松整形严格整形
闲置时积累令牌以备突发队列为空,无积累
适用场景允许短期峰值严格保护下游
如何选择合适的速率限制算法?

选择令牌桶的场景:

  • API需要允许客户端在短时间内发送批量请求(如数据导入)
  • 流量存在明显的峰谷特征,希望在低谷期"积攒额度"
  • 需要在限制平均速率的同时保持一定的灵活性

选择漏桶的场景:

  • 下游服务非常脆弱,必须严格保护不被突发流量冲垮
  • 需要保证输出流量的绝对平滑(如流媒体分发)
  • 网络层面的流量整形,确保带宽使用均匀
速率限制在实际架构中的最佳实践
  • 分层限流:在网关层(如Nginx/Kong)使用令牌桶进行粗粒度限流,在应用层进行细粒度限流。
  • 合理设置burst:令牌桶的容量应基于业务峰值流量设计,一般为平均速率的2-5倍。
  • 返回友好错误:被限流时返回HTTP 429状态码,并在响应头中包含X-RateLimit-*系列信息。
  • 监控与告警:对限流拒绝率进行监控,拒绝率突然升高可能意味着攻击或业务异常。
  • 分布式限流:在分布式系统中,使用Redis等集中式存储来实现全局限流计数器。