限流算法之漏桶法(Java實現)

限流算法之漏桶法(Java實現)

限流算法之漏桶法(Java實現)

前面幾篇介紹了限流的其他方法,請參考

限流算法之計數器算法(Java實現)

限流算法之滑動窗口法(Java實現)

限流算法之令牌桶法(Java實現)

今天在看看最後一種漏桶算法,這個也比較簡單,

漏桶算法

漏桶(Leaky Bucket)算法:請求先進入到漏桶裡,漏桶以一定的速度出水,當水流入速度過大或者漏桶已滿會直接溢,然後就拒絕請求,可以看出漏桶算法能強行限制數據的傳輸速率。

限流算法之漏桶法(Java實現)

示意圖

漏桶實現

實現的關鍵點

  • 定義一個桶的最大量
  • 記錄上次桶刷新的時間和水量,以便後續計算當前桶裡面的水
  • 定義水的流出速率,速率越小,限制流量越小
  • 每次請求,先檢查桶的水量,如果沒有達到最大值,往桶裡面加水

代碼比較簡單,下面就是完整的代碼,

限流算法之漏桶法(Java實現)

漏桶算法

最後做個測試,用一個線程池模擬多個請求,看看是否到達限流的效果,到此限流的常用算法就介紹完了,歡迎討論,一起學習,一起進步。

限流算法之漏桶法(Java實現)

測試


分享到:


相關文章: