很多博客这样说,但是我不太同意这句话..
我认为也是可以容许一定突发的。当然,具体看之前流量情况,只要之前少有流量进来,那么桶内部就应该被漏得很少了吧(甚至可能整个桶都是空的),因为桶本身是容量的。 否则,令牌桶 也有类似问题。 除非我们默认令牌桶的容量是 非常非常大。
谁赞同我吗?
分享一下我的想法。我理解到题主文章里的分析是关于入桶的部分,即 如果桶有余量的话不管哪一种,只要不超过余量都是能够承载,而不会导致请求被拒绝。
但是引用文章里说的 可以处理瞬时流量应该是漏出速率的部分,举例来说:
假设业务处理的极限是14/s,漏桶算法设置了10/s的限制。在桶有余量的前提下突然来了大量突发请求,漏桶依旧以10/s的处理速度来处理业务,而令牌桶就可以达到14/s,可以赶快的搞完这些请求。所以说令牌桶更适合在有突发流量的情况下使用。
如果令牌桶也是设置了10/s的限制,而且前期没有积累,桶里面没有多余令牌, 那么它凭什么能够达到14/s?
@CanntBelieve: 令牌桶 没有设限制的说法,漏桶限制出口,令牌桶限制的是入口。
这边讨论的情况是有余量的情况下,比如从20%一下压到80%,相对来说令牌桶能压榨更多资源
@coval: 我懂你的意思 ; 不过,令牌桶 也是桶,按常识,桶都是有最大限制的,不管它再大,它还是有一个大小。当然,理论上可以做到 不限制大小。 不过注意到 com.google.common.util.concurrent.RateLimiter#create 方法也是有 maxSize 参数的。