什么是限流? 为什么要限流?
限流就是在一定时间内控制服务接口的请求量(qps)
通过限流,我们可以很好地控制系统的 qps,从而达到保护系统或者接口服务器稳定的目的等
限流的常用算法
1. 计数器法
计数器法是限流算法里最简单也是最容易实现的一种算法。
比如,对于 A 接口来说,我们 1 分钟的访问次数不能超过 100 个。那么我们可以这么做:在一开始的时候,我们可以设置一个计数器 counter,每当一个请求过来的时候,counter 就加 1,如果 counter 的值大于 100 并且该请求与第一个请求的间隔时间还在 1 分钟之内,那么说明请求数过多;
如果该请求与第一个请求的间隔时间大于 1 分钟,且 counter 的值还在限流范围内,那么就重置 counter。
2. 漏桶算法 (Leaky Bucket)
平滑网络上的突发流量。使其整流为一个稳定的流量。
有一个固定容量的桶,有水流进来,也有水流出 去。对于流进来的水来说,我们无法预计一共有多少水会流进来,也无法预计水流的速度。但是对于流出去的水来说,这个桶可以固定水流出的速率。当桶满了之后,多余的水将会溢出 (多余的请求会被丢弃)
3. 令牌桶算法 (Token Bucket)
令牌桶算法比漏桶算法稍显复杂。首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的 (可用 token 数为 0),token 以一个固定的速率 r 往桶里填充,直到达到桶的容量,多余的令牌将会被丢弃。每当一个请求过来时,就会尝试从桶里移除一个令牌,如果没有令牌的话,请求无法通过。
正文完