限流解决方案
大约 1 分钟限流解决方案
概述
限流用来控制在高并发、大流量的场景中对服务接口请求的速率。常见的限流算法有计数器限流、漏桶算法和令牌桶算法。关于限流也有了一些很成熟的解决方案和中间件。
限流算法
计数器算法
计数器限流算法在一段时间间隔内处理请求的最大的固定数量,超过部分不做处理。执行流程如下图:
漏桶限流算法
流程如下:
- 水通过进水口(对应客户端请求)以任意速率流入漏桶。
- 漏桶的容量是固定的,出水(放行)速率也是固定的。
- 漏桶容量是不变的,如果处理速度太慢,桶内水量会超出桶的容量,后面流入的水就会溢出,表示请求拒绝。
流程图如下所示:
令牌桶算法
令牌桶算法以一个设定的速率产生令牌并放入令牌桶,每次用户请求都得申请令牌,如果令牌不足,就会拒绝请求。
流程如下:
- 进水口按照某个速度向桶中放入令牌。
- 令牌的容量是固定的,但是放行的速度是不固定的,只要桶中还有剩余令牌,一旦请求过来就能申请成功,然后放行。
- 如果令牌的发放速度慢于请求到来的速度,桶内就无令牌可领,请求就会被拒绝。
流程如下图所示: