深入理解速率限制算法:从令牌桶到滑动窗口

44 阅读1分钟

它可以防止一个用户过度使用资源并降低其他用户的服务质量。以下是速率限制的一些好处

  • 呈现 资源匮乏
  • 降低服务器托管成本
  • 提供针对 DDoS 的基本保护

方案

令牌桶

  • 桶中保存固定数量的令牌
  • 令牌以固定速率添加到存储桶中
  • 当收到请求时:
    • 如果令牌可用,则会将其从存储桶中删除并允许请求。
    • 如果没有可用的令牌,则请求将被拒绝或延迟。
  • 如果令牌可用,可以接受短暂的大量连续请求

Token Bucket

漏桶

  • 将其视为以固定速率泄漏的桶
  • 传入请求将添加到存储桶中
  • 请求以恒定速率处理
  • 如果新请求到达时存储桶已满,则会丢弃该请求
  • 以稳定的速率输出请求

Leaky Bucket

固定窗口计数

  • 时间被划分为固定大小的窗口
  • 计数器跟踪当前窗口中每个客户端/IP 的请求数
  • 如果计数超过限制,则进一步的请求将被拒绝,直到下一个窗口
  • 简单高效,允许在结束/开始时出现突发流量峰值

Fixed Window

滑动窗口计数

  • 保留每个请求的时间戳日志
  • 当收到请求时,将检查日志以计算在过去 X 秒内发出的请求数
  • 如果低于限制,则允许并记录请求;否则,它将被拒绝

Sliding Window