服务接口API限流

268 次浏览次阅读
没有评论

什么是限流? 为什么要限流?

限流就是在一定时间内控制服务接口的请求量(qps)

通过限流,我们可以很好地控制系统的 qps,从而达到保护系统或者接口服务器稳定的目的等

限流的常用算法

1. 计数器法

计数器法是限流算法里最简单也是最容易实现的一种算法。

比如,对于 A 接口来说,我们 1 分钟的访问次数不能超过 100 个。那么我们可以这么做:在一开始的时候,我们可以设置一个计数器 counter,每当一个请求过来的时候,counter 就加 1,如果 counter 的值大于 100 并且该请求与第一个请求的间隔时间还在 1 分钟之内,那么说明请求数过多;

如果该请求与第一个请求的间隔时间大于 1 分钟,且 counter 的值还在限流范围内,那么就重置 counter。

php 代码实现
golang 代码实现

2. 漏桶算法 (Leaky Bucket)

平滑网络上的突发流量。使其整流为一个稳定的流量。
有一个固定容量的桶,有水流进来,也有水流出 去。对于流进来的水来说,我们无法预计一共有多少水会流进来,也无法预计水流的速度。但是对于流出去的水来说,这个桶可以固定水流出的速率。当桶满了之后,多余的水将会溢出 (多余的请求会被丢弃)

php 代码实现
golang 代码实现

3. 令牌桶算法 (Token Bucket)

令牌桶算法比漏桶算法稍显复杂。首先,我们有一个固定容量的桶,桶里存放着令牌(token)。桶一开始是空的 (可用 token 数为 0),token 以一个固定的速率 r 往桶里填充,直到达到桶的容量,多余的令牌将会被丢弃。每当一个请求过来时,就会尝试从桶里移除一个令牌,如果没有令牌的话,请求无法通过。

php 代码实现
golang 代码实现

正文完
 0
评论(没有评论)