固定窗口計數器算法
單位時間內超閾值的請求被丟棄。ide
單位時間內可接收的請求有可能爲閾值的2倍。性能
例:10秒爲一單位,閾值5.blog
第一個10秒的後5秒接收請求5個,中止接收。接口
第二個10秒的籤5秒接收請求5個,中止接收。隊列
兩個窗口並無超過閾值,但先後兩個5秒就是一單位時間,接收了10個請求。消息隊列
滑動窗口計數器it
每5秒可經過5個請求。class
第6秒,前5秒的請求總和3<5,可經過2個請求,多的丟棄。請求
第七、8秒,前5秒的請求總和=5,不經過任何請求。
第9秒,前5秒的請求總和4<5,可經過1個請求,多的丟棄。
以此類推。
漏桶算法
其實就是生產-消費模式的消息隊列。
全部請求都放入消息隊列(桶)中,消費者以固定頻率從桶內取請求並處理。請求數超過桶的閾值則丟棄或排隊。
消費者獲取請求的頻率是固定的,在突發大流量請求的狀況下,即使桶內請求已滿且消費者自身性能足夠的狀況下,響應速度也沒法提升。
令牌桶算法
令牌以固定頻率生成並放入桶中,令牌滿了則丟棄。
請求從桶內獲取令牌,有令牌則執行,無令牌則丟棄。
相比漏桶,即使有突發大流量請求進來,只要有令牌就能夠及時獲得執行。