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