漏桶算法和令牌桶算法

💡 原文中文,约8200字,阅读约需20分钟。
📝

内容提要

本文介绍了漏桶算法和令牌桶算法,它们是常用的接口限流设计算法。漏桶算法限制请求速率,令牌桶算法允许一定程度的并发超过速率限制。两种算法都基于时间片,但漏桶算法的速率固定,令牌桶算法在桶中有令牌时可以请求服务。需要动态调整漏桶和令牌桶的参数值。

🎯

关键要点

  • 限流的目的是保护系统,通过对并发请求进行限速。
  • 漏桶算法将请求量限额比喻为一个装满水的桶,单位时间内请求额度是固定的。
  • 令牌桶算法定期向桶中添加令牌,请求服务时需要从桶中获取令牌。
  • 漏桶算法的速率限制是固定的,无法处理流量突增的场景。
  • 令牌桶算法允许一定程度的并发超过速率限制。
  • 漏桶和令牌桶算法都基于时间片,但实现方式不同。
  • 漏桶算法在请求容量允许的情况下,仍然无法处理流量突增的场景。
  • 令牌桶算法在桶中没有令牌时会退化为漏桶算法。
  • 两种算法都需要在初始化时指定固定的桶容量参数,但现代微服务架构中负载能力会不断变化。
  • 建议结合K8S的自动扩容进行压测,以动态调整漏桶和令牌桶的参数值。
➡️

继续阅读