令牌桶演算法:
令牌桶演算法,是一個存放固定容量令牌的桶,按照固定速率往桶里添加令牌,
- 假設限制2r/s,則按照500毫秒的固定速率往桶中添加令牌,
- 桶中最多存放b個令牌,當桶滿時,新添加的令牌被丟棄或拒絕,
- 當一個n個位元組大小的資料包到達,將從桶中洗掉n個令牌,接著資料包被發送到網路上,
- 如果桶中的令牌不足n個,則不會洗掉令牌,且該資料包將被限流(要么丟棄,要么在緩沖區等待),

漏桶演算法:
- 一個固定容量的漏桶,按照常量固定速率流出水滴,
- 如果桶是空的,則不需要流出水滴,
- 可以以任意速率流入水滴到漏桶,
- 如果流入水滴超過了桶的容量,則流入的水滴溢位了(被丟棄),而漏桶容量是不變的,

令牌桶和漏桶演算法對比:
- 令牌桶是按照固定速率往桶中添加令牌,請求是否被處理需要看桶中令牌是否足夠,當令牌數減為零時,則拒絕新的請求,
- 漏桶則是按照常量固定速率流出請求,流入請求速率任意,當流入的請求數累積到漏桶容量時,則新流入的請求被拒絕,
- 令牌桶限制的是平均流入速率(允許突發請求,只要有令牌就可以處理,支持一次拿3個令牌,或4個令牌),并允許一定程度的突發流量,
- 漏桶限制的是常量流出速率(即流出速率是一個固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2),從而平滑突發流入速率,
- 令牌桶允許一定程度的突發,而漏桶主要目的是平滑流入速率,
- 兩個演算法實作可以一樣,但是方向是相反的,對于相同的引數得到的限流效果是一樣的,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/182115.html
標籤:其他
上一篇:騰訊云容器服務日志采集最佳實踐
