限流算法

通常来说有三种比较常见

  1. 计数器
  2. 滑动窗口
  3. 漏桶
  4. 令牌桶

计数器

滑动窗口

滑动窗口是计数器的一种改进方法

滑动窗口的思路是,在窗口内统计请求的数量,当窗口内请求数量达到阈值时,拒绝请求。

滑动窗口比基础的计数器方法改进的地方主要体现在以下几个方面:

  1. 更加平滑地处理流量突变

基础的计数器方法在一个固定时间窗口内统计请求数量,如果在这个时间窗口内请求数量超过阈值,则会拒绝所有请求。这会导致在窗口切换时出现流量突变,例如在窗口刚开始时,请求可能会被立即拒绝,而在窗口结束时,即使请求数量已经下降,也可能仍然会被拒绝。

滑动窗口则将时间窗口划分为多个子窗口,并对每个子窗口进行独立统计。当某个子窗口内的请求数量超过阈值时,只会拒绝该子窗口内的请求,而不会影响其他子窗口。这样可以使流量更加平滑地处理突发流量。

  1. 更好地适应流量变化

基础的计数器方法使用固定的时间窗口,无法适应流量的变化。例如,如果流量突然增加,则可能会导致请求被拒绝;而如果流量突然下降,则可能会导致资源浪费。

滑动窗口则可以通过调整窗口大小和步长来适应流量的变化。例如,当流量增加时,可以缩小窗口大小或减小步长,以提高系统的处理能力;当流量下降时,可以扩大窗口大小或增大步长,以节省资源。

  1. 更加灵活的控制策略

基础的计数器方法只能根据请求数量来进行限流。

滑动窗口则可以根据不同的需求来制定更加灵活的控制策略。例如,可以根据请求的来源、类型、时间等因素来进行限流。

总结

滑动窗口是一种更加灵活、有效地限流方法,可以更好地处理流量突变、适应流量变化以及实现更加灵活的控制策略。

以下是一些滑动窗口算法的应用场景:

  • Web API 限流
  • 服务端限流
  • 网络限流
  • 消息队列限流
  • 缓存限流

漏桶

令牌桶

漏桶和令牌桶比较

如果拿漏桶和令牌桶来比较的话,漏桶是没有流量突变的,然而令牌桶因为要申请临牌的缘故所以它存在流量突变,或者卡死的状态

最后更新: 4/2/2024, 10:08:43 AM