什么是好的速率限制算法?

什么是好的速率限制算法?,第1张

什么是好的速率限制算法

这是最简单的算法,如果您只想在消息到达太快时就丢弃它们(而不是对其进行排队,这很有意义,因为队列可能会任意大):

rate = 5.0; // unit: messagesper  = 8.0; // unit: secondsallowance = rate; // unit: messageslast_check = now(); // floating-point, e.g. usec accuracy. Unit: secondswhen (message_received):  current = now();  time_passed = current - last_check;  last_check = current;  allowance += time_passed * (rate / per);  if (allowance > rate):    allowance = rate; // throttle  if (allowance < 1.0):    discard_message();  else:    forward_message();    allowance -= 1.0;

此解决方案中没有数据结构,计时器等,它可以正常工作:)看到这一点,“津贴”最多以每秒5/8个单位的速度增长,即每八秒最多五个单位。转发的每封邮件都会扣除一个单位,因此每八秒钟发送的邮件不能超过五个。

请注意,该值

rate
应为整数,即不包含非零的小数部分,否则该算法将无法正常工作(实际费率将不是
rate/per
)。例如,
rate=0.5;per=1.0;
它无法正常工作,因为
allowance
它将永远不会增长到1.0。但是
rate=1.0; per=2.0;
效果很好。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5615430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存