令牌桶限流
2021-12-28 15:51:40 33 举报
令牌桶限流是一种流量控制方法,用于平滑突发流量和限制瞬时流量。它的原理是系统以固定的速率向令牌桶中添加令牌,而请求处理则需要从令牌桶中取出令牌。当令牌桶中的令牌数达到上限时,新来的请求将无法获得令牌,因此被限流或拒绝。 这种方法的优点是可以平滑突发流量,避免因为瞬间的大量请求而导致系统崩溃。同时,由于令牌桶的容量是有限的,因此可以限制系统的瞬时流量,防止过多的请求占用过多的资源。 总之,令牌桶限流是一种有效的流量控制方法,可以保护系统免受过载和崩溃的风险。
作者其他创作
大纲/内容
获取失败
是否存在该流控规则
[预热/冷启动] 流控效果(令牌桶算法)
规则入库
预热模式效果如下:QPS逐渐上升,直至达到设定的QPS稳定
否
取出令牌
丢弃
桶是否满
是
更新/获取规则
获取成功
限流规则:1.默认规则:客户号:交易码:账号2.无账号规则: 客户号:交易码
产生令牌
快速失败模式效果如下:达到预设QPS,抛弃其他请求
限流原理:原有方案:ratelimitj 开源流控框架(使用近似滑动窗口算法) https://github.com/mokies/ratelimitj 现有方案:Sentinel + Nacos 流控 (选用预热/冷启动模式)1.[快速失败]模式(滑动窗口算法):默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝。2.[预热/冷启动]模式(令牌桶算法):在 Sentinel 中,令牌桶算法通过 预热/冷启动 模式 实现。在这个情况下,当配置每秒能通过多少请求(QPS)后,那么在这里 sentinel 也会每秒往桶内添加多少的令牌。当一个请求进入的时候,将会从中移除一个令牌。由此可以得出,桶内的令牌越多,也说明当前的系统利用率越低。因此,当桶内的令牌数量超过某个阈值后,那么当前的系统可以称之为处于饱和状态。当系统处于 饱和状态的时候,当前允许的最大 QPS 将会随着剩余的令牌数量减少而缓慢增加。3.[匀速排队]模式(漏桶算法):匀速排队方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。
固定x个/秒
ApiSettle
入库/注册
规则同步
发布规则
DB
匀速排队效果如下:在排队超时时间范围内速率保持一致,超时返回失败
Nacos配置中心
请求
默认设置:1.默认QPS:102.默认预热时间:10S3.限流策略:取不到令牌返回 交易已被流控限制!
运营管理平台流控规则管理
获取令牌
Service
返回被限流消息
0 条评论
下一页