【数据结构和算法】令牌桶算法
一、令牌桶算法
1、参考:https://www.jianshu.com/p/5d4fe4b2a726
https://blog.csdn.net/valleychen1111/article/details/78038366?utm_source=blogxgwz1
https://www.e-learn.cn/content/java/2603243
https://blog.csdn.net/superscorpio/article/details/86598984
2、对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获取一个令牌,当桶里没有令牌可取时,则拒绝服务。
二、令牌桶算法实现原理
1、guava支持了令牌桶算法的实现
Guava有两种限流模式,一种为稳定模式(SmoothBursty:令牌生成速度恒定),一种为渐进模式(SmoothWarmingUp:令牌生成速度缓慢提升直到维持在一个稳定值) 两种模式实现思路类似,主要区别在等待时间的计算上,本篇重点介绍SmoothBursty
2、guava令牌桶算法实现的处理流程