https://juejin.cn/post/7219095104040075301
什么是服务限流
限定固定请求数量访问服务端,保护服务接口
欢迎关注个人公众号【好好学技术】交流学习
常用限流框架
常见的限流方式有:nginx限流、guava限流、sentinel、Redis等实现方式。
他们的本质算法都是基于 漏桶、令牌桶、滑动窗口来实现的。
常见的经典限流有计时器限流、滑动窗口限流、漏桶限流、令牌桶限流四种。
计数器限流算法
定义
- 定义一个单位时间(如1秒钟)的阈值,每收到一次请求,增加一次计数。
- 判断 请求总数 <= 当前单位时间内的阈值,则执行正常流程
- 如果请求总数 > 当前单位时间内的阈值, 则触发限流处理
- 进入到下一个单位时间,计数清零,开始新一轮的计数
>](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暴增)
>](https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/93a2f1edb15f412cab3c79320b6383a3~tplv-k3u1fbpfcp-zoom-in-crop-mark:1512:0:0:0.awebp?))
滑动窗口限流算法
定义