服务接口API限流
什么是限流? 为什么要限流?
限流就是在一定时间内控制服务接口的请求量(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往桶里填充,直到达到桶的容量,多余的令牌将会被丢弃。每当一个请求过来时,就会尝试从桶里移除一个令牌,如果没有令牌的话,请求无法通过。