目录

常见的限流算法

1、计数器(固定窗口)算法


常见的限流算法

1、计数器(固定窗口)算法

计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。

此算法在单机还是分布式环境下实现都非常简单,使用redis的incr原子自增性和线程安全即可轻松实现。

对于秒级以上的时间周期来说,会存在一个非常严重的问题,那就是临界问题,如下图:

限流

假设1min内服务器的负载能力为100,因此一个周期的访问量限制在100,然而在第一个周期的最后5秒和下一个周期的开始5秒时间段内,分别涌入100的访问量,虽然没有超过每个周期的限制量,但是整体上10秒内已达到200的访问量,已远远超过服务器的负载能力,由此可见,计数器算法方式限流对于周期比较长的限流,存在很大的弊端。

2、滑动窗口算法

限流中的滑动窗口可以简单理解为,设定的单位时间就是一个窗口,窗口可以分割多个更小的时间单元,随着时间的推移,窗口会向右移动。比如一个接口一分钟限制调用1000次,1分钟就可以理解为一个窗口,可以把1分钟分割为4个单元格,每个单元格就是15秒。每个时间片段都有独立的计数器,我们在计算整个时间窗口内的请求总数时会累加所有的时间片段内的计数器。时间窗口划分的越细,那么滑动窗口的滚动就越平滑,限流的统计就会越精确。

限流

可以把这些小单元看作一个环,可以用一个数组存储,比如:A[0]、A[1]、A[2]、A[3],用一个变量k表示当前窗口,

 

 

 

 

 

 

 

相关文章:

  • 2021-12-25
  • 2021-11-17
  • 2021-07-31
  • 2021-07-18
  • 2021-08-25
  • 2022-02-17
  • 2021-09-05
猜你喜欢
  • 2022-12-23
  • 2021-06-18
  • 2022-12-23
  • 2021-12-29
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案