限流算法之漏桶法(Java實現)
前面幾篇介紹了限流的其他方法,請參考
限流算法之計數器算法(Java實現)
限流算法之滑動窗口法(Java實現)
限流算法之令牌桶法(Java實現)
今天在看看最後一種漏桶算法,這個也比較簡單,
漏桶算法
漏桶(Leaky Bucket)算法:請求先進入到漏桶裡,漏桶以一定的速度出水,當水流入速度過大或者漏桶已滿會直接溢,然後就拒絕請求,可以看出漏桶算法能強行限制數據的傳輸速率。
示意圖
漏桶實現
實現的關鍵點
定義一個桶的最大量記錄上次桶刷新的時間和水量,以便後續計算當前桶裡面的水定義水的流出速率,速率越小,限制流量越小每次請求,先檢查桶的水量,如果沒有達到最大值,往桶裡面加水代碼比較簡單,下面就是完整的代碼,
漏桶算法
最後做個測試,用一個線程池模擬多個請求,看看是否到達限流的效果,到此限流的常用算法就介紹完了,歡迎討論,一起學習,一起進步。
測試