Java 面试题
目录

Java 中常用的限流算法有哪些?

· 约 2 分钟读完 · 第 235 / 274 章

推荐答案

在Java中,常用的限流算法包括以下几种:

  1. 计数器算法(Counter)
  2. 滑动窗口算法(Sliding Window)
  3. 漏桶算法(Leaky Bucket)
  4. 令牌桶算法(Token Bucket)

本题详细解读

1. 计数器算法(Counter)

计数器算法是最简单的限流算法之一。它通过维护一个计数器来记录在固定时间窗口内的请求数量。当请求数量超过设定的阈值时,新的请求将被拒绝。

优点:

  • 实现简单,易于理解。

缺点:

  • 无法应对突发流量,因为计数器在时间窗口结束时会被重置,可能导致瞬间流量过大。

2. 滑动窗口算法(Sliding Window)

滑动窗口算法是对计数器算法的改进。它将时间窗口划分为多个小的时间段,每个时间段维护一个计数器。通过滑动窗口的方式,可以更精确地控制流量。

优点:

  • 比计数器算法更精确,能够更好地应对突发流量。

缺点:

  • 实现相对复杂,需要维护多个计数器。

3. 漏桶算法(Leaky Bucket)

漏桶算法通过一个固定容量的“桶”来控制流量。请求以恒定的速率从桶中“漏出”,如果桶满了,新的请求将被丢弃或排队等待。

优点:

  • 能够平滑流量,避免突发流量对系统的冲击。

缺点:

  • 无法应对突发流量,因为漏桶的速率是固定的。

4. 令牌桶算法(Token Bucket)

令牌桶算法通过一个固定容量的“桶”来存放令牌。系统以恒定的速率向桶中添加令牌,每个请求需要消耗一个令牌。如果桶中没有足够的令牌,请求将被拒绝。

优点:

  • 能够应对突发流量,因为桶中可以积累令牌。
  • 实现相对简单,且效果较好。

缺点:

  • 需要维护令牌桶的状态,增加了实现的复杂性。

这些限流算法各有优缺点,实际应用中可以根据具体需求选择合适的算法。