限流算法小結

1.令牌桶

優點:能限制請求頻率,也能夠應對突發流量
參數
  • 最少令牌
  • 最大令牌
  • 添加令牌的速度
  • 上次添加令牌的毫秒數
過程
  • 系統會按恆定1/QPS時間間隔(如果QPS=100,則間隔是10ms)往桶裏加入Token,如果桶已經滿了就不再加了。新請求來臨時,會各自拿走一個Token,如果沒有Token可拿了就阻塞或者拒絕服務。

2.漏桶法

優點:能限制請求頻率,適合請求速度勻速限流
缺點:不支持突發流量
過程
  • 水(請求)先進入到漏桶裏,漏桶以一定的速度出水(接口有響應速率),當水流入速度過大會直接溢出(訪問頻率超過接口響應速率),然後就拒絕請求可以看出漏桶算法能強行限制數據的傳輸速率。

3.計數法(固定時間窗口限流算法):

  • 選定一個時間的起點,之後每當有接口請求到來,我們就將計數器加1,如果在當前時間窗口內,根據限流規則(每秒鐘允許100次訪問請求),出現累加訪問次數超過限流值情況,我們請拒絕後續訪問請求。當進入下一個時間窗口後,計數器就清零重新計數。

  • 缺點:限流策略過於粗略,無法應對兩個時間窗口臨界時間內的突發流量

4.滑動時間窗口限流算法:

  • 在任意1s的時間窗口內,接口的請求次數都不能大於K次。

  • 維護一個K+1的循環隊列,用來記錄1s內到來的請求,【當隊列滿時,tail指向的位置實際上是沒有存儲數據的,所以循環隊列會浪費一個數組的存儲空間】

  • 當有新的請求到來時,我們將與這個新請求的時間間隔超過1s的請求,從隊列中刪除。然後我們再來看循環隊列中是否有空閒位置。如果有,則把新請求存儲在隊列尾部,如果沒有,則說明1s內的請求次數已經超過了限流值K,所以這個請求被拒絕服務。

  • 缺點:只能在選定時間粒度上限流,對選定時間粒度內的更加細粒度的訪問頻率不做限制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章