什么是服务限流
限定固定请求数量访问服务端,保护服务接口
常用限流框架
常见的限流方式有:nginx限流、guava限流、sentinel、Redis等实现方式。
他们的本质算法都是基于 漏桶、令牌桶、滑动窗口来实现的。
常见的经典限流有计时器限流、滑动窗口限流、漏桶限流、令牌桶限流四种。
计数器限流算法
定义
- 定义一个单位时间(如1秒钟)的阈值,每收到一次请求,增加一次计数。
- 判断 请求总数 <= 当前单位时间内的阈值,则执行正常流程
- 如果请求总数 > 当前单位时间内的阈值, 则触发限流处理
- 进入到下一个单位时间,计数清零,开始新一轮的计数
缺点
计数器限流算法相对简单那,但是它的弊端还是很明显的,也就是临界点问题。假设1秒钟100的阈值,如果0-0.9秒都没有请求,最后0.9秒到1秒收到100个请求,下一秒1到1.1秒又收到100个请求,那么服务器所承受的压力就非常大了。(如果是0.99秒到1秒,0.999秒到1秒呢?tps暴增)