https://juejin.cn/post/7219095104040075301

什么是服务限流

限定固定请求数量访问服务端,保护服务接口

欢迎关注个人公众号【好好学技术】交流学习

常用限流框架

常见的限流方式有:nginx限流、guava限流、sentinel、Redis等实现方式。

他们的本质算法都是基于 漏桶、令牌桶、滑动窗口来实现的。

常见的经典限流有计时器限流、滑动窗口限流、漏桶限流、令牌桶限流四种。

计数器限流算法

定义

  1. 定义一个单位时间(如1秒钟)的阈值,每收到一次请求,增加一次计数。
  2. 判断 请求总数 <= 当前单位时间内的阈值,则执行正常流程
  3. 如果请求总数 > 当前单位时间内的阈值, 则触发限流处理
  4. 进入到下一个单位时间,计数清零,开始新一轮的计数

计数器限流.png>](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/fde67b2a3cfc4ac09e9ba19d2d33ffb7~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?))

缺点

计数器限流算法相对简单那,但是它的弊端还是很明显的,也就是临界点问题。假设1秒钟100的阈值,如果0-0.9秒都没有请求,最后0.9秒到1秒收到100个请求,下一秒1到1.1秒又收到100个请求,那么服务器所承受的压力就非常大了。(如果是0.99秒到1秒,0.999秒到1秒呢?tps暴增)

计数器弊端.png>](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/93a2f1edb15f412cab3c79320b6383a3~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?))

滑动窗口限流算法

定义