本文主要是介绍apisix limit-req 限流,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
apisix 官方文档对于rate,burst解释不是很清楚。这里会误以为当Rate=10,Burst=0时,客户端基于IP的限流为每秒10次。但是实际上有突发流量在第0.1秒发送5次时,这时会有4个请求被拒绝。
limit count 确实如上述所说,下面借nginx讲解下limit-req。
限流算法
常见的限流算法有计数器(固定窗口)、滑动窗口、漏桶、令牌桶
计数器
最简单的限流算法,计数器限制每一分钟或者每一秒钟内请求不能超过一定的次数,在下一秒钟计数器清零重新计算
- 限制每分钟访问不能超过100次,客户端在第一分钟的59秒请求100次,在第二分钟的第1秒又请求了100次,那么在这2秒内后端会受到200次请求的压力,形成了流量突刺。
滑动窗口
滑动窗口其实是细分后的计数器,它将每个时间窗口又细分成若干个时间片段,每过一个时间片段,整个时间窗口就会往右移动一格
- 每分钟被分成了4个时间片段,每个时间片段15秒,假设客户端在第一分钟的50秒请求了100次,时间到了第二分钟的10秒,时间窗口向右滑动一格,这时这个时间窗口其实已经打满了100次,客户端将被拒绝访问
漏桶
均匀出水
- 固定大小FIFO队列+定时取队列元素的方式实现
- 削峰填谷
缺点
- 队列中会进行排队
令牌桶
桶里一直扔令牌
- 有令牌快速响应
- 不会进行漏桶等待
缺点
- 下游并发高
Nginx 限流
nginx 限流。
a rate=10,burst=0
请求0.05s发送2个,一个被拒绝
b rate=10,burst=1
请求0.05s发送2个,两个成功,第二个等待第一个执行完
nginx 限流demo参考 nginx限流
这篇关于apisix limit-req 限流的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!