漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以必定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),而后就拒绝请求,能够看出漏桶算法能强行限制数据的传输速率。示意图以下:算法
令牌桶算法(Token Bucket)和 Leaky Bucket 效果同样但方向相反的算法,更加容易理解。随着时间流逝,系统会按恒定1/QPS时间间隔(若是QPS=100,则间隔是10ms)往桶里加入Token(想象和漏洞漏水相反,有个水龙头在不断的加水),若是桶已经满了就再也不加了。新请求来临时,会各自拿走一个Token,若是没有Token可拿了就阻塞或者拒绝服务。示意图以下:blog
漏桶算法与令牌桶算法的区别在于,漏桶算法可以强行限制数据的传输速率,令牌桶算法可以在限制数据的平均传输速率的同时还容许某种程度的突发传输。令牌桶的另一个好处是能够方便的改变速度。 一旦须要提升速率,则按需提升放入桶中的令牌的速率。通常会定时(好比100毫秒)往桶中增长必定数量的令牌, 有些变种算法则实时的计算应该增长的令牌的数量。接口