關於兩種限流模式
阿新 • • 發佈:2018-10-25
方案 次數 進行 其他 att 分析 常用 服務 技術
每一個時間片(單位時間)就是一個獨立的計數器,用以數組保存。將當前時間以某種方式(比如取模)映射到數組的一項中。每次訪問先對當前時間片上的計數器+1,再計算前N個時間片的訪問量總合,超過閾值則限流。
流量預警和限流方案中,比較常用的有兩種。第一種滑窗模式,通過統計一段時間內的訪問次數來進行控制,訪問次數達到的某個峰值時進行限流。第二種為並發用戶數模式,通過控制最大並發用戶數,來達到流量控制的目的。下面來簡單分析下兩種的優缺點。
1、滑窗模式
模式分析:
在每次有訪問進來時,我們判斷前N個單位時間內的總訪問量是否超過了設置的閾值,並對當前時間片上的請求數+1。
上圖每一個格式表示一個固定的時間(比如1s),每個格子一個計數器,我們要獲取前5s的請求量,就是對當前時間片i ~ i-4的時間片上計數器進行累加。
這種模式的實現的方式更加契合流控的本質意義。理解較為簡單。但由於訪問量的不可預見性,會發生單位時間的前半段大量請求湧入,而後半段則拒絕所有請求的情況。(通常,需要可以將單位時間切的足夠的小來緩解 )其次,我們很難確定這個閾值設置在多少比較合適,只能通過經驗或者模擬(如壓測)來進行估計,即使是壓測也很難估計的準確。集群部署中每臺機器的硬件參數不同,可能導致我們需要對每臺機器的閾值設置的都不盡相同。同一臺機子在不同的時間點的系統壓力也不一樣(比如晚上還有一些任務,或其他的一些業務操作的影響),能夠承受的最大閾值也不盡相同,我們無法考慮的周全。
所以滑窗模式通常適用於對某一資源的保護的需求上(或者說是承諾比較合適:我對某一接口的提供者承諾過,最高調用量不超過XX),如對db的保護,對某一服務的調用的控制上。
代碼實現思路:
每一個時間片(單位時間)就是一個獨立的計數器,用以數組保存。將當前時間以某種方式(比如取模)映射到數組的一項中。每次訪問先對當前時間片上的計數器+1,再計算前N個時間片的訪問量總合,超過閾值則限流。
@https://www.cnblogs.com/yuhan-TB/p/3765457.html
關於兩種限流模式