天天看點

限流算法,令牌桶和漏桶

令牌桶算法:

令牌桶算法,是一個存放固定容量令牌的桶,按照固定速率往桶裡添加令牌。

  • 假設限制2r/s,則按照500毫秒的固定速率往桶中添加令牌。
  • 桶中最多存放b個令牌,當桶滿時,新添加的令牌被丢棄或拒絕。
  • 當一個n個位元組大小的資料包到達,将從桶中删除n個令牌,接着資料包被發送到網絡上。
  • 如果桶中的令牌不足n個,則不會删除令牌,且該資料包将被限流(要麼丢棄,要麼在緩沖區等待)。
限流算法,令牌桶和漏桶

漏桶算法:

  • 一個固定容量的漏桶,按照常量固定速率流出水滴。
  • 如果桶是空的,則不需要流出水滴。
  • 可以以任意速率流入水滴到漏桶。
  • 如果流入水滴超過了桶的容量,則流入的水滴溢出了(被丢棄),而漏桶容量是不變的。
限流算法,令牌桶和漏桶

令牌桶和漏桶算法對比:

  • 令牌桶是按照固定速率往桶中添加令牌,請求是否被處理需要看桶中令牌是否足夠,當令牌數減為零時,則拒絕新的請求。
  • 漏桶則是按照常量固定速率流出請求,流入請求速率任意,當流入的請求數累積到漏桶容量時,則新流入的請求被拒絕。
  • 令牌桶限制的是平均流入速率(允許突發請求,隻要有令牌就可以處理,支援一次拿3個令牌,或4個令牌),并允許一定程度的突發流量。
  • 漏桶限制的是常量流出速率(即流出速率是一個固定常量值,比如都是1的速率流出,而不能一次是1,下次又是2),進而平滑突發流入速率。
  • 令牌桶允許一定程度的突發,而漏桶主要目的是平滑流入速率。
  • 兩個算法實作可以一樣,但是方向是相反的,對于相同的參數得到的限流效果是一樣的。

繼續閱讀