漏桶算法和令牌桶算法的区别, 说得清楚吗? 其实两个算法并不难理解,当然有区别,但是感觉区别没那么大, 看网上的一下说明,感觉是误导他人。
引用网上说明:
漏桶算法和令牌桶算法的区别
**漏桶算法的出水速度是恒定的,**那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出)。漏桶算法通常可以用于限制访问外部接口的流量,保护其他人系统,比如我们请求银行接口,通常要限制并发数。令牌桶算法生成令牌的速度是恒定的,而请求去拿令牌是没有速度限制的。这意味,面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,可以处理瞬时流量,而且拿令牌的过程并不是消耗很大的事情。令牌桶算法通常可以用于限制被访问的流量,保护自身系统。
其实两者还是非常的相似的, 尽管内部原理差不多,但是其实 还是差不多, 上面的表述有误:
那么意味着如果瞬时大流量的话,将有大部分请求被丢弃掉(也就是所谓的溢出) —— 如果漏桶已经是空的, 可能根本不会溢出,自然不会大部分被丢弃,
面对瞬时大流量,该算法可以在短时间内请求拿到大量令牌,可以处理瞬时流量 —— 同样,如果此时令牌已经所剩无几,令牌桶算法也无法短时间拿到大量令牌, 它同样需要等待!
本质上来讲, 漏桶算法 是流出速度固定,从而在桶未空的时候,容量稳步减少, 可用空间增加(也就是可以获取的、可流入的量 增加);而令牌桶算法是流入速度固定,也是从而在桶未满的时候,容量稳步增加(也就使得可以获取的、可流出的量 增加);
所以本质上来讲, 都是使得一个操作的量增加,使得另外的相反的操作得以进行。只要桶的 现有容量足够大, 它就可以获得足够的 突发!! 所以,真正意义来说, 没有区别。本质都是一个 匀速的操作,限制反向操作的平均速度。
参考
https://blog.csdn.net/a718515028/article/details/108363499