令牌桶(Token Bucket)和漏桶(Leaky Bucket)细节对比

令牌桶(Token Bucket)和漏桶(Leaky Bucket)是两种经典的流量整形(Traffic Shaping)和速率限制(Rate Limiting)算法,用于控制网络或系统中数据的传输速率。它们的目标是平滑突发流量、防止资源过载,但实现方式和适用场景有所不同。


1. 令牌桶算法(Token Bucket)

核心思想

系统以固定速率向一个桶中放入令牌(Token),每个令牌代表一个发送数据的许可。当请求到达时,必须从桶中获取令牌才能被处理;若桶中无令牌,则请求被拒绝或等待。

关键参数
  • 令牌生成速率(r):每秒向桶中添加的令牌数量(如 10 tokens/s)。
  • 桶容量(c):桶中最多能存放的令牌数(如 100 tokens)。
工作流程
  1. 令牌添加 :系统按固定时间间隔(如每秒)向桶中添加 r 个令牌,直到桶满。
  2. 请求处理
    • 若有令牌,则取走一个令牌并处理请求(如允许数据包通过)。
    • 若无令牌,则拒绝或缓存请求(取决于实现)。
特点
  • 允许突发流量:若桶中有足够令牌,可以一次性处理大量请求(突发流量)。
  • 灵活性:适合需要短期突发但长期平均速率受限的场景(如API限流)。
示例
  • 桶容量为 100,生成速率为 10 tokens/s。
  • 若桶初始满,可以立即处理 100 个请求,之后每秒最多处理 10 个。

2. 漏桶算法(Leaky Bucket)

核心思想

请求像水一样流入桶中,桶以固定速率(漏出)处理请求。无论输入速率如何波动,输出速率恒定。

关键参数
  • 漏出速率(r):桶每秒处理的请求数(如 10 requests/s)。
  • 桶容量(c):桶中最多能缓存的请求数(如 100 requests)。
工作流程
  1. 请求到达:请求进入桶中,若桶未满则被缓存;若满则被丢弃(或拒绝)。
  2. 请求处理 :桶以固定速率 r 漏出请求(如每秒处理 10 个)。
特点
  • 严格平滑流量:输出速率绝对恒定,即使输入有突发。
  • 无突发支持:即使桶未满,也无法加速处理(与令牌桶的区别)。
示例
  • 漏出速率为 10 requests/s,桶容量为 100。
  • 即使瞬间收到 100 个请求,系统仍会按每秒 10 个匀速处理。

对比总结

特性 令牌桶 漏桶
突发流量 支持(消耗桶中令牌) 不支持(输出速率恒定)
输出速率 平均速率可控,允许短期突发 绝对恒定
实现复杂度 需维护令牌生成逻辑 需队列缓存请求
典型场景 API限流、网络流量整形(如TCP) 流量平滑(如视频流控)

选择建议

  • 用令牌桶:需要允许短期突发(如API限流、网络拥塞控制)。
  • 用漏桶:需严格避免突发(如音视频传输、固定速率队列)。

两种算法均可结合队列实现请求缓存,但令牌桶更灵活,漏桶更稳定。实际中,令牌桶应用更广泛(如Redis的RATE LIMITER、Guava的RateLimiter)。

相关推荐
qeen871 分钟前
【算法笔记】双指针及其经典例题解析
c++·笔记·算法·双指针
路溪非溪2 分钟前
网络运输层:TCP协议详解(一)
网络·网络协议·tcp/ip
黎阳之光3 分钟前
黎阳之光:以视频孪生+全域感知,助力低空经济破局突围
大数据·人工智能·算法·安全·数字孪生
汽车仪器仪表相关领域16 分钟前
Kvaser Leaf Light HS v2 M12:5 针 M12 NMEA 2000 接口,海事与工业 CAN 总线测试的防水耐用之选
大数据·网络·人工智能·功能测试·安全性测试
爱吃芹菜炒肉32 分钟前
Chapter 16: Power Management
服务器·c语言·网络·tcp/ip·pcie
CM莫问34 分钟前
详解机器学习中的马尔可夫链
人工智能·算法·机器学习·概率论·马尔可夫·马尔科夫
南宫萧幕36 分钟前
基于 Luenberger 观测器的 PMSM 无速度传感器 id=0 矢量控制系统 Simulink 建模与实现(一)
算法·matlab·汽车·控制
斯维赤43 分钟前
每天学习一个小算法:选择排序
java·学习·算法
超级码力6661 小时前
【Latex第三方文档类standalone】standalone类介绍及应用
算法·数学建模·信息可视化
明朝百晓生1 小时前
强化学习 [chapter10] [page3 ]Actor-Critic Methods
算法