滑動窗口是針對計(jì)數(shù)器存在的臨界點(diǎn)缺陷,所謂滑動窗口(Sliding window)是一種流量控制技術(shù),這個詞出現(xiàn)在 TCP 協(xié)議中。滑動窗口把固定時間片進(jìn)行劃分,并且隨著時間的流逝,進(jìn)行移動,固定數(shù)量的可以移動的格子,進(jìn)行計(jì)數(shù)并判斷閥值。
上圖中我們用紅色的虛線代表一個時間窗口(一分鐘),每個時間窗口有 6 個格子,每個格子是 10 秒鐘。每過 10 秒鐘時間窗口向右移動一格,可以看紅色箭頭的方向。我們?yōu)槊總€格子都設(shè)置一個獨(dú)立的計(jì)數(shù)器 Counter,假如一個請求在 0:45 訪問了那么我們將第五個格子的計(jì)數(shù)器 +1(也是就是 0:40~0:50),在判斷限流的時候需要把所有格子的計(jì)數(shù)加起來和設(shè)定的頻次進(jìn)行比較即可。
那么滑動窗口如何解決我們上面遇到的問題呢?來看下面的圖:
當(dāng)用戶在 0:59 秒鐘發(fā)送了 200 個請求就會被第六個格子的計(jì)數(shù)器記錄 +200,當(dāng)下一秒的時候時間窗口向右移動了一個,此時計(jì)數(shù)器已經(jīng)記錄了該用戶發(fā)送的 200 個請求,所以再發(fā)送的話就會觸發(fā)限流,則拒絕新的請求。
其實(shí)計(jì)數(shù)器就是滑動窗口啊,只不過只有一個格子而已,所以想讓限流做的更精確只需要劃分更多的格子就可以了,為了更精確我們也不知道到底該設(shè)置多少個格子,格子的數(shù)量影響著滑動窗口算法的精度,依然有時間片的概念,無法根本解決臨界點(diǎn)問題。
本文鏈接:http://www.tebozhan.com/showinfo-26-11884-0.html常用的限流方式-滑動窗口(計(jì)數(shù)器的改進(jìn)版)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com
上一篇: 您是否想要制作自己的俄羅斯方塊游戲?pyGame帶你飛!
下一篇: 50 種 ES6 模塊,面試被問麻了