高并发限流方案
2022-09-28 13:57:54 24 举报
AI智能生成
高并发限流方案
作者其他创作
大纲/内容
定义
作用范围
单机
分布式限流
限流方式
计数器
滑动窗口
漏桶
令牌桶
计数器
在一段时间间隔内,对请求进行计数,与阀值进行比较判断是否需要限流,一旦到了时间临界点,将计数器清零
优点
简单
缺点
很难处理单位时间的边界
滑动窗口
把固定时间片进行划分,并且随着时间的流逝,进行移动,固定数量的可以移动的格子,进行计数并判断阀值
优点
将固定时间段分块,时间比“计数器”复杂,适用于稍微精准的场景
缺点
格子的数量影响着滑动窗口算法的精度,依然有时间片的概念,无法根本解决临界点问题
漏桶
一个固定容量的漏桶,按照固定速率流出水滴
特点
漏桶具有固定容量,出水速率是固定常量(流出请求)
如果桶是空的,则不需流出水滴
可以以任意速率流入水滴到漏桶(流入请求)
如果流入水滴超出了桶的容量,则流入的水滴溢出(新请求被拒绝)
优点
可以很好的控制消费频率
缺点
限制的是常量流出速率(即流出速率是一个固定常量值),所以最大的速率就是出水的速率,不能出现突发流量
实现稍微复杂,单位时间内,不能多消费,感觉不太灵活
令牌桶
一个固定的桶,桶里存放着令牌(token)。一开始桶是空的,系统按固定的时间(rate)往桶里添加令牌,直到桶里的令牌数满,多余的请求会被丢弃。当请求来的时候,从桶里移除一个令牌,如果桶是空的则拒绝请求或者阻塞
特点
令牌按固定的速率被放入令牌桶中
桶中最多存放 B 个令牌,当桶满时,新添加的令牌被丢弃或拒绝
如果桶中的令牌不足 N 个,则不会删除令牌,且请求将被限流(丢弃或阻塞等待)
优点
可以解决“漏桶”不能灵活消费的问题,又能避免过渡消费,强烈推荐
缺点
实现稍微复杂
Redis + Lua 分布式限流
优点
支持分布式限流,有效保护下游依赖的服务资源
缺点
依赖 Redis,对边界没有很好处理,导致限流不能精准控制
其他
Tomcat
设置线程数
Nginx
控制并发连接数
RateLimiter
基于令牌桶
0 条评论
下一页