前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >支持快速调整配额的令牌桶算法

支持快速调整配额的令牌桶算法

原创
作者头像
键盘工
修改2019-02-26 10:23:34
9100
修改2019-02-26 10:23:34
举报

令牌桶算法被大家所熟识,这里就不再展开介绍。令牌桶遇到配置调整可以通过粗暴的重启来完成,本文提供一个热调整算法。

所谓令牌桶调整,比如一个配置了10s内上限100的令牌桶(与“每0.1秒发一个令牌,桶上限100”这种配置形式是等价的),可以调整其时间长度或令牌上限。

最简单的调整方法,就是改变令牌派发的时间间隔和上限,但会有冷启动问题,即实际观察到的伸缩效果会延后。改进这一点要在调整时直接改变令牌桶中剩余令牌的数额来实现,下面具体介绍这个办法。

在一个令牌发放周期(有些令牌桶实现中并没有周期的设置)中:

T 表示周期时长

Q 表示周期内派发令牌数

t 表示相对周期开始的时间

P 表示投放令牌速率,为T/Q

N 表示桶里剩余可用令牌数

那么,已发放令牌数为Q*t/T,待发放令牌为Q*(T-t)/T

当扩张令牌桶(增大Q)时,则是透支一部分待发放令牌直接放入桶中,令 N'=N+X*(Q'-Q)*(T-t)/T,X为透支系数,透支部分要在投放中偿还,即P'=P*((1-X)*(Q'-Q)+Q)/Q,至周期结束时恢复P'=T/Q'

当缩小令牌桶时,同理存在一个存量扣除系数Y,令N'=N-Y*(Q-Q')*(T-t)/TP'=P*((1-Y)*(Q'-Q)+Q)/Q,同样至周期结束时恢复P'=T/Q'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档