對四種限流演算法的思考和總結
固定視窗限流
是什麼:指定一個單位時間內允許多少次操作來限流
優點: 簡單
缺點: 假如設定了一分鐘允許10次操作,但是第一秒就操作了10次。或者第59秒來了10次操作,緊接著第61秒又來了10次 這樣的話就形成了流量突刺
滑動視窗限流
把上面的單位時間拆分,打個比方,剛才是1分鐘可以操作10次,現在把1分鐘劃分成10個6s的視窗,每個視窗期間只能接收1個請求,當0~6秒這個視窗結束時,自動把60 ~ 66秒這個視窗新增進來,就好像是滑動的一樣。這樣就解決了流量突刺的問題
缺點: 實現複雜 很難選擇合適的滑動單位
漏桶限流演算法
設定一個有儲存上限的桶, 請求來了, 先放到桶中,按指定的固定速率給到系統來處理。
缺點: 因為速率固定,所以沒辦法快速處理一批請求。固定速率還限制了效能,比如伺服器每秒最大能處
理五個請求,但是為了穩定我們肯定要設定小於五個的請求,突然來了的流量就只能存在桶裡慢慢給服務
器,沒辦法用到伺服器的效能上限
令牌桶限流演算法
設定一個有上限的令牌桶,按固定的速率往令牌桶中放令牌,一個令牌對應一個請求,請求來了,先去令牌桶中拿到對應的令牌再帶著令牌傳送給伺服器處理。這樣如果突然來了一批請求,桶裡面的令牌可能因為之前沒什麼請求有累積。
這樣既有前面演算法解決流量突刺問題的優點,又一定程度上增加了併發效能
缺點:還是要考慮放令牌的速率