计数器算法

常见限流算法 - 图1
计数器算法:在指定周期内累加访问次数,当访问次数达到设定的阈值时,出发限流策略,当进入下一个时间周期时进行访问次数的清零0;
存在的问题

常见限流算法 - 图2
临界问题:在第一分钟的58s出现100个请求,第二个分钟的1:02出现100个请求,会导致4s钟出现200个请求,但是不会限流;

滑动窗口算法

为解决计数器算法带来的临界问题,引入滑动窗口算法,滑动窗口是一种流量控制技术,在TCP网络通信协议中,就采用了滑动窗口算法来解决网络拥堵的情况;
滑动窗口算法:在固定窗口中分割出多个小时间窗口,分别在每个小时间窗口中记录访问次数,然后根据时间讲窗口往前滑动并闪出去过期的小时间窗口,最终只需要统计滑动窗口范围内的所有小时间窗口数的总的计数即可
常见限流算法 - 图3

令牌桶限流算法

令牌桶是网络流量整形和速率限制中最常使用的一种算法;对于每一个请求,都需要从令牌桶中获得一个令牌,如果没有获得令牌,则需要出发限流策略。
令牌桶算法:系统会以一个恒定速度王固定容量的令牌桶中放入令牌,如果此时有客户端请求过来,则需要先从令牌桶中拿到令牌以获得访问资格;

常见限流算法 - 图4

漏桶限流算法

漏桶限流算法的主要作用是控制数据注入网络的速度,平滑网络上的突发流量。
漏桶限流算法:在漏桶算法内部同样维护一个容器,这个容器会以恒定的速度出水,不管上面的水流速度多快,漏桶水滴 的流出速度始终保持不变。实际上消息中间件就使用了漏桶限流的思想,不管生产者的请求量多大,消息的处理能力取决于消费者。

常见限流算法 - 图5