概述

限流:对应用服务器的请求做限制,避免因过多请求而导致服务器过载甚至宕机。限流算法常见的包括两种:

  • 计数器算法,又包括窗口计数器算法、滑动窗口计数器算法
  • 漏桶算法(Leaky Bucket)
  • 令牌桶算法(Token Bucket)

计数器算法

固定窗口计数器算法概念如下:

  • 将时间划分为多个窗口;
  • 在每个窗口内每有一次请求就将计数器加一,当时间到达下一个窗口时,计数器重置。
  • 如果计数器超过了限制数量,则本窗口内所有的请求都被丢弃。

image-1655628203364

漏桶算法

漏桶算法说明:

  • 将每个请求视作"水滴"放入"漏桶"进行存储;
  • "漏桶"以固定速率向外"漏"出请求来执行,如果"漏桶"空了则停止"漏水”;
  • 如果"漏桶"满了则多余的"水滴"会被直接丢弃。
    image-1655628264171

令牌桶算法

漏桶算法说明:

  • 以固定的速率生成令牌,存入令牌桶中,如果令牌桶满了以后,多余令牌丢弃
  • 请求进入后,必须先尝试从桶中获取令牌,获取到令牌后才可以被处理
  • 如果令牌桶中没有令牌,则请求等待或丢弃
    image-1655628312790

总结

限流有什么作用?

  • 限流是保护服务器,避免因过多请求而导致服务器过载甚至宕机

限流算法:

  • 计数器算法
  • 漏桶算法
  • 令牌桶算法