服务接口API限流

作者: 太阳上的雨天 分类: Go,PHP 发布时间: 2023-05-02 16:09

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

限流就是在一定时间内控制服务接口的请求量(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代码实现

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注