當前位置:
首頁 > 知識 > 如何選擇限流演算法

如何選擇限流演算法

「服務限流」通過限制每個用戶調用 API 的頻率來保護服務不被過度調用。在沒有限流的情況下,每個用戶可以隨意請求服務 API,這可能引起流量尖峰導致其他用戶的請求無法被處理。啟用服務限流後,可以限制 API 每周期可被調用的次數。


漏斗演算法

漏斗演算法類似一個先進先出隊列。如下圖所示,每個請求類似水滴加入到一個漏斗桶中。漏斗會以恆定速率將水滴漏出,這個過程表示請求被處理。

[ 漏斗演算法 ]

漏斗模型的好處是,它的實現很簡單,而且對後端的負載是恆定的。但是問題是它無法解決有突增流量的情況。這些突增的請求會在隊列中呆很長時間才被處理,這個時間請求的前端可能已經超時。

固定窗口演算法

[ 固定窗口演算法 ]

固定窗口演算法可以部分解決流量突增的問題。它不像漏斗演算法一樣,按恆定的速率去處理請求,而是只要在固定的時間周期內不超過限額即可。這樣可以應對流量突增的問題。但是它的問題是,如果當前請求量已經超過限額,那麼只有每次周期開始的前段時間中進來的請求會被處理,而後端時間由於已達到限額而拒絕處理請求。這會導致系統的負載不均勻,都壓在了周期前段時間。

滑動窗口演算法

[ 固定窗口 對比 滑動窗口 ]

滑動窗口演算法與固定窗口演算法的不同點在於,滑動窗口的周期起止時間是浮動的。對於同樣實際請求量大於限額的情況,滑動窗口演算法會使得高峰不會出現在固定的周期開始時間點,而是會有所浮動。這會使系統的整體負載更加均勻。


令牌桶演算法

[ 令牌桶演算法 ]

令牌桶演算法的模型如下:

每次處理請求前,先從令牌桶嘗試拿出一個令牌,如果拿到,則可以處理該請求;否則拒絕該請求

新的令牌會勻速地充入令牌桶中,單位時間的流量限額決定了令牌桶的大小和充入的速率

令牌桶的這種特性使得它對於突增流量,能夠以較平緩地方式去處理,從而使整體系統的負載最為均勻。


總結

如果你的系統沒有突增流量,對於流量絕對均勻有很強的要求,使用漏斗演算法。

如果你的系統有少量突增流量,同時你希望限流演算法簡單易實現,可以使用滑動時間窗口演算法。

如果你的系統經常有突增流量,為了系統整體穩定性,應使用令牌桶演算法。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 昱唯 的精彩文章:

TAG:昱唯 |