基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制也叫过载保护

时间:2021-02-16 15:02:53

基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制

Congestion Control Algorithm,这是TCP里的一个专业术语,拥塞控制算法。说的也是流量控制类似的事。

老规矩,直接上图。

先看看漏桶(Leaky bucket)

基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制也叫过载保护

基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制也叫过载保护

再看看令牌桶(Token bucket)

Guava官方文档-RateLimiter类基于漏桶(Leaky bucket)与令牌桶(Token bucket)算法的流量控制也叫过载保护


漏桶(Leaky bucket)与令牌桶(Token bucket)算法有什么区别。

令牌桶,初始令牌个数是0,最大容量是100,当1万个请求到来时(初始令牌个数是0时),也只能一秒处理一个请求个,因为令牌是每秒产生一个。

漏桶,初始流量是0,最大流量是100,当1万个请求到来时,可以迅速的,最多的,能同时处理100个。

=============================================

令牌桶,初始令牌个数是100,最大容量是100,当1万个请求到来时(初始令牌个数是0时),可以迅速的,最多的,同时处理100个请求,从第101个请求开始,也只能等新令牌的产生,而令牌是每秒产生一个。
漏桶,初始流量是0,最大流量是100,当1万个请求到来时,可以迅速的,最多的,能同时处理100个。

Google Guava RateLimiter类,是一个基于令牌桶的限流算法。

参考以下文章:

http://www.javaranger.com/archives/1769

https://www.kullabs.com/classes/subjects/units/lessons/notes/note-detail/4008

http://www2.ic.uff.br/~michael/kr1999/6-multimedia/6_06-scheduling_and_policing.htm