漏桶算法(Leaky Bucket)是一種網路流量控制算法,主要用於流量整形(Traffic Shaping)和速率限制(Rate Limiting),其核心目的是控制數據注入網路的速率,從而平滑網路上的突發流量。
該算法可以模擬為一個具有固定容量的桶,數據包或請求被加入到這個桶中,並以一定的速率從桶中「漏出」或處理。如果桶已滿,則新到達的數據包或請求將被丟棄。這種算法可以保證處理請求的速率保持恆定,有效防止因流量激增而導致的服務不穩定。
漏桶算法的特點包括:
它強制實施一個常量的輸出速率,不論輸入數據流的突發性。當輸入空閒時,算法不執行任何動作。
對於可變包長的情況,最好是在每個時間片傳輸固定數目的位元組,例如每個時間片傳輸1024位元組,以確保漏桶算法的平穩運行。
當桶滿時,新進入的請求將被丟棄,這可能導致請求丟失。
與令牌桶算法相比,漏桶算法具有截然不同的特性。令牌桶算法允許在某些時間內突發處理更多請求,而漏桶算法則以恆定的速率處理請求,不適合需要突發處理的場景。