常见的限流算法
- 计数器算法
- 漏桶算法
- 令牌桶算法
限流常用场景
可靠的限流算法可以保障服务器的稳定运行,常规的限流实现有两种方式,分别为:Nginx 和业务代码实现。而本文所说的限流是业务代码中的逻辑限流
常见的限流算法
计数器算法
通过限制单位时间段内的请求数量,算法的核心思想为是从一个请求进来的时候开始计时,在接下来单位时间段内每接收到一个请求则累计+1,如果累计数值超过上限,则后续的请求全部拒绝,直到下一个单位时间段开始。
缺点:在这个时间段内,前时间段请求数量就已经超过上限了,则后时间段服务器只能拒绝所有请求。或者在后时间段和新的前时间段之间,累计是可以达到 2*累计值。
解决方案:滑动窗口模式,将单位时间段缩小,当然范围要根据具体业务来决定。
漏桶算法
通过实现一个容器,当请求进来的时候,则将请求添加到容器中,容器设有上限,超出了则拒绝接下来的请求。而服务器则固定一个时间往容器中获取请求进行处理,每处理完一个则容器就可以再接收一个请求。
这样保障了无论请求有多少,服务器处理速度始终保持不变。
缺点:无法解决短时间内的突发流量。
解决方案:令牌桶
令牌桶算法
令牌桶是漏桶算法的改良版本,设定一个令牌工厂,匀速不断的生产令牌加入到容器中,当请求进来的时候,需要先获得令牌才能进入容器,进入容器后的请求才会被处理。
在短时间内出现突发流量,可以增加令牌工厂生产令牌的频率,当流量过去的时候减少令牌的数量控制请求数量。