【解决方案】令牌桶限流器(Redis+LUA+Python实现)

1 缘起

系统需要对某些功能做限流,因为,这个功能CPU消耗远高于其他功能,最高可占用100%分配的CPU,导致整个系统无法对外提供服务。
为了保证系统稳定运行,以及缓解CPU高消耗,对这些高CPU消耗的功能做限流处理,
而限流方案有多种:计数器算法、滑动窗口算法、漏桶算法和令牌桶算法。
最终,选择令牌桶算法,保证系统平滑限流。
另,为提升限流操作稳定性,使用LUA脚本包装令牌桶数据变更操作,
这样做,虽然保证了多个限流任务间的原子性操作,但是,无法保证LUA脚本的多步骤原子性。
不过,够用。

2 理论

限流器有多种实现方案,本次分享令牌桶限流器
令牌桶限流器示意图如下图所示。由图可知,令牌桶限流器运转有两个过程,
(1)用户使用系统时,系统从令牌桶中获取令牌,根据令牌桶中令牌数量是否满足当前请求的令牌数量,即令牌桶剩余令牌数量>=当前请求的令牌数量时,可以获取到令牌,否则,无法获取令牌,判断是否进入下一个流程;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值