跳至主要內容

限流解决方案

xw大约 1 分钟限流解决方案

概述

限流用来控制在高并发、大流量的场景中对服务接口请求的速率。常见的限流算法有计数器限流、漏桶算法和令牌桶算法。关于限流也有了一些很成熟的解决方案和中间件。

限流算法

计数器算法

计数器限流算法在一段时间间隔内处理请求的最大的固定数量,超过部分不做处理。执行流程如下图:

image-20230211104303618

漏桶限流算法

流程如下:

  1. 水通过进水口(对应客户端请求)以任意速率流入漏桶。
  2. 漏桶的容量是固定的,出水(放行)速率也是固定的。
  3. 漏桶容量是不变的,如果处理速度太慢,桶内水量会超出桶的容量,后面流入的水就会溢出,表示请求拒绝。

流程图如下所示:

image-20230211105131945

令牌桶算法

令牌桶算法以一个设定的速率产生令牌并放入令牌桶,每次用户请求都得申请令牌,如果令牌不足,就会拒绝请求。

流程如下:

  1. 进水口按照某个速度向桶中放入令牌。
  2. 令牌的容量是固定的,但是放行的速度是不固定的,只要桶中还有剩余令牌,一旦请求过来就能申请成功,然后放行。
  3. 如果令牌的发放速度慢于请求到来的速度,桶内就无令牌可领,请求就会被拒绝。

流程如下图所示:

image-20230211110444175