令牌桶算法

令牌桶算法以固定速率生成令牌并存入桶中,请求到达时需消耗令牌。桶满时新令牌被丢弃。突发流量可快速消耗积压令牌,适合允许短期超载的场景。Spring Cloud Gateway通过RedisRateLimiter实现基于Redis的分布式令牌桶限流。

关键参数:

  • replenishRate:每秒生成的令牌数
  • burstCapacity:桶的最大容量

数学表达: \lim_{t \to \infty} \frac{tokens}{time} = replenishRate

漏桶算法

漏桶算法以恒定速率处理请求,超出速率的请求排队或丢弃。能严格限制请求处理速率,适合需要平滑流量的场景。Spring Cloud Gateway需自定义过滤器实现,如通过Bucket4j集成。

关键参数:

  • capacity:桶的容量
  • leakRate:每秒漏出的请求数

对比差异:

  • 令牌桶允许突发,漏桶强制匀速
  • 令牌桶侧重限制平均速率,漏桶侧重控制瞬时速率

更多推荐