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