限流算法

2021-04-17  本文已影响0人  HYIndex

为什么要限流?

由于Web服务无法控制调用方的行为,当遇到请求并发量超过系统的容量阈值,会导致服务器资源耗尽从而导致服务异常或宕机,而且某个服务的请求量突增还会影响到上游的服务,如DB或者是其他的公共服务,导致整个系统瘫痪。
可能导致流量突增的原因有以下几点:

为了对服务进行保护,就需要对请求进行限流。

常见算法

固定窗口计数器算法


算法思路

特点:原理和实现都比较简单,但是这种算法可能会让通过的请求量为阈值的两倍。比如当阈值是100时,第一个窗口在0-0.5秒期间没有请求,0.5-1.0秒期间有100个请求,然后到了第二个窗口计数器已经重置,在1.0-1.5秒期间有100个请求,这样看来在0.5-1.5秒的1秒内通过了200个请求。

滑动窗口计数器算法

该方法就是对固定窗口计数算法的窗口时间细分更多的区间,并且按照时间在区间上滑动,如下图所示:


算法思路

特点
将时间划分为更小单位的区间,按时间滑动,避免了固定窗口计数器会产生双倍请求的问题,但是时间区间的精度越高,算法需要的空间容量就越大。

漏桶算法

算法思路

特点:通常使用消息队列来实现漏桶。该算法能良好的保证瞬时请求量不会超过阈值,但是当短时间内有大量的突发请求时,即使服务器没有负载,每个请求也都需要在队列中等待一段时间才能被响应。

令牌桶算法


算法思路

特点:令牌桶算法既能将流量均匀的分布,又能接受服务器承受的容量范围内的突发请求,因此是目前使用比较广泛的一种限流算法。缺点是突发流量时第一个周期会多放过一些请求。

参考

【1】InfoQ:分布式服务限流实战,已经为你排好坑了
【2】阿里云:限流算法介绍

上一篇下一篇

猜你喜欢

热点阅读