天天看點

【5分鐘背八股】計數器算法是什麼?

計數器算法,是指在指定的時間周期内累加通路次數,達到設定的門檻值時,觸發限流政策。下一個時間周期進行通路時,通路次數清零。此算法無論在單機還是分布式環境下實作都非常簡單,使用redis的incr原子自增性,再結合key的過期時間,即可輕松實作。

【5分鐘背八股】計數器算法是什麼?

image.png

從上圖我們來看,我們設定一分鐘的門檻值是100,在0:00到1:00内請求數是60,當到1:00時,請求數清零,從0開始計算,這時在1:00到2:00之間我們能處理的最大的請求為100,超過100個的請求,系統都拒絕。

這個算法有一個臨界問題,比如在上圖中,在0:00到1:00内,隻在0:50有60個請求,而在1:00到2:00之間,隻在1:10有60個請求,雖然在兩個一分鐘的時間内,都沒有超過100個請求,但是在0:50到1:10這20秒内,确有120個請求,雖然在每個周期内,都沒超過門檻值,但是在這20秒内,已經遠遠超過了我們原來設定的1分鐘内100個請求的門檻值。

【5分鐘背八股】計數器算法是什麼?