漏桶演算法與令牌桶演算法

2021-08-25 10:42:28 字數 1246 閱讀 7474

漏桶演算法(leaky bucket)是網路世界中流量整形(traffic shaping)或速率限制(rate limiting)時經常使用的一種演算法,它的主要目的是控制資料注入到網路的速率,平滑網路上的突發流量。漏桶演算法提供了一種機制,通過它,突發流量可以被整形以便為網路提供乙個穩定的流量。

漏桶可以看作是乙個帶有常量服務時間的單伺服器佇列,如果漏桶(包快取)溢位,那麼資料報會被丟棄

漏桶演算法的基本內容如下:

* 漏桶演算法強制乙個常量的輸出速率而不管輸入資料流的突發性。當輸入空閒時,該演算法不執行任何動作;

* 主機在每乙個時間片向網路注入乙個資料報,因此產生了一致的資料流,平滑了突發的流量;

* 當資料報具有相同尺寸的時候(例如atm信元),每個時間片傳輸乙個資料報的工作機制沒有任何問題。但對於可變包長,這種工作機制可能存在一點問題,此時,最好每個時間片傳輸固定數目的位元組。例如:如果每個時間片傳輸1024位元組,那麼乙個時間片允許傳輸乙個1024位元組的包,兩個512位元組的包,或者四個 256位元組的包;

在概念上,漏桶演算法可以作如下理解:

* 到達的資料報(網路層的pdu)被放置在底部具有漏孔的桶中(資料報快取);

* 漏桶最多可以排隊b個位元組,漏桶的這個尺寸受限於有效的系統記憶體。如果資料報到達的時候漏桶已經滿了,那麼資料報應被丟棄;

* 資料報從漏桶中漏出,以常量速率(r位元組/秒)注入網路,因此平滑了突發流量。

在流量整形中還存在另外乙個流行的演算法:令牌桶演算法(token bucket)。有時人們將漏桶演算法與令牌桶演算法錯誤地混淆在一起。而實際上,這兩種演算法具有截然不同的特性並且為截然不同的目的而使用。它們之間最主要的差別在於:漏桶演算法能夠強行限制資料的傳輸速率,而令牌桶演算法能夠在限制資料的平均傳輸速率的同時還允許某種程度的突發傳輸

在某些情況下,漏桶演算法不能夠有效地使用網路資源。因為漏桶的漏出速率是固定的引數,所以,即使網路中不存在資源衝突(沒有發生擁塞),漏桶演算法也不能使某乙個單獨的流突發到埠速率。因此,漏桶演算法對於存在突發特性的流量來說缺乏效率。而令牌桶演算法則能夠滿足這些具有突發特性的流量。通常,漏桶演算法與令牌桶演算法可以結合起來為網路流量提供更大的控制。

漏桶演算法的應用例項:

在atm網路的交換層,漏桶演算法可以用來實現cbr業務。當資料流量超過協商速率一段時間後,漏桶(快取)將會溢位。這時需要檢查每乙個信元中的信元丟失優先順序(clp)字段,低優先順序的信元將會被丟棄並被原始傳送裝置重新傳輸。

漏桶演算法和令牌桶演算法

漏桶演算法 水 請求 先進入漏桶裡,漏桶以一定的速度出水 介面迴圈去獲取請求 當水流入速度過大會直接溢位,然後拒絕請求。可見這裡有兩個變數,乙個是桶的大小,支援流量最大時可以存放多少的水 請求 另乙個是水桶漏洞的大小,在某些情況下,漏桶演算法不能有效地使用網路資源,因為漏桶的漏出速率是固定的引數,所...

令牌桶 限速 限速之令牌桶和漏桶演算法

限速是大型服務裡面必備的功能,目的是對併發控制和請求進行限速來保護系統,讓系統不會因為單位時間內的請求數量太大,被打爆。對於超過了限速的那些請求,處理方法往往是 直接拒絕服務,排隊等待,或者降級處理。對於限速來說,最常用的兩個演算法是 令牌桶演算法和漏桶演算法,下面我們便來看下它們是怎麼回事。一 令...

限流演算法之漏桶演算法 令牌桶演算法

每個api介面都是有訪問上限的,當訪問頻率或者併發量超過其承受範圍時候,我們就必須考慮限流來保證介面的可用性或者降級可用性。即介面也需要安裝上保險絲,以防止非預期的請求對系統壓力過大而引起的系統癱瘓。通常的策略就是拒絕多餘的訪問,或者讓多餘的訪問排隊等待服務,或者引流。如果要準確的控制qps,簡單的...