1. 程式人生 > >基於漏桶(Leaky bucket)與令牌桶(Token bucket)演算法的流量控制也叫過載保護

基於漏桶(Leaky bucket)與令牌桶(Token bucket)演算法的流量控制也叫過載保護

基於漏桶(Leaky bucket)與令牌桶(Token bucket)演算法的流量控制

Congestion Control Algorithm,這是TCP裡的一個專業術語,擁塞控制演算法。說的也是流量控制類似的事。

老規矩,直接上圖。

先看看漏桶(Leaky bucket)



再看看令牌桶(Token bucket)

Guava官方文件-RateLimiter類

漏桶(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