限流算法

常见的限流算法

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

限流常用场景

可靠的限流算法可以保障服务器的稳定运行,常规的限流实现有两种方式,分别为:Nginx 和业务代码实现。而本文所说的限流是业务代码中的逻辑限流

常见的限流算法

计数器算法

通过限制单位时间段内的请求数量,算法的核心思想为是从一个请求进来的时候开始计时,在接下来单位时间段内每接收到一个请求则累计+1,如果累计数值超过上限,则后续的请求全部拒绝,直到下一个单位时间段开始。

缺点:在这个时间段内,前时间段请求数量就已经超过上限了,则后时间段服务器只能拒绝所有请求。或者在后时间段和新的前时间段之间,累计是可以达到 2*累计值。

解决方案:滑动窗口模式,将单位时间段缩小,当然范围要根据具体业务来决定。

漏桶算法

通过实现一个容器,当请求进来的时候,则将请求添加到容器中,容器设有上限,超出了则拒绝接下来的请求。而服务器则固定一个时间往容器中获取请求进行处理,每处理完一个则容器就可以再接收一个请求。

这样保障了无论请求有多少,服务器处理速度始终保持不变。

缺点:无法解决短时间内的突发流量。

解决方案:令牌桶

令牌桶算法

令牌桶是漏桶算法的改良版本,设定一个令牌工厂,匀速不断的生产令牌加入到容器中,当请求进来的时候,需要先获得令牌才能进入容器,进入容器后的请求才会被处理。

在短时间内出现突发流量,可以增加令牌工厂生产令牌的频率,当流量过去的时候减少令牌的数量控制请求数量。


 本篇
限流算法 限流算法
常见的限流算法 计数器算法 漏桶算法 令牌桶算法 限流常用场景可靠的限流算法可以保障服务器的稳定运行,常规的限流实现有两种方式,分别为:Nginx 和业务代码实现。而本文所说的限流是业务代码中的逻辑限流 常见的限流算法计数器算法通过限制
2021-03-27
下一篇 
axios拦截器源码分析 axios拦截器源码分析
本文通过使用方法和源码实现,了解axios模块如何实现请求和响应拦截器
2021-01-12
  目录