限流算法-固定时间窗口
生活随笔
收集整理的這篇文章主要介紹了
限流算法-固定时间窗口
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
本文介紹了固定時間窗口限流算法。
前言
首先限流的算法有很多種,比如固定時間窗口限流算法、滑動時間窗口算法、漏桶算法、令牌桶算法,其余的算法后續(xù)我們會一一介紹。
一、限流場景
站在服務調用方的角度來說,限流的場景大體分為兩類。
-
對外提供服務
用戶通過某種形式調用到了我們的服務,比如提供了web服務。
(1)用戶增長速度太快。請求量一下子上來了,接口扛不住壓力
(2)爬蟲
(3)熱點事件。比如公司上市成功曝光度增加,從而導致訪問用戶量增加。
(4)刷單。有的公司甚至主動為用戶提供刷單工具,就會導致服務的請求量暴增。
-
對內提供服務
當前存在A、B、C、D四個服務,A服務同時被B、C、D服務調用,如果B服務的請求量暴增,導致A服務宕機,同時就會導致C、D服務也無法使用,這種情況就不太合適。
二、固定時間窗口限流算法原理
固定時間內只允許通過一定數(shù)據(jù)量請求,超出的請求數(shù)則會被攔截。
缺點:
這種方式下我們假定的是請求均勻分布,如果請求數(shù)據(jù)只集中在時間窗口內的某一個時間段,那么就可能超出承受范圍,如下圖所示。
三、代碼實現(xiàn)
public class FixedTimeWindow {public static final Integer DURATION = 1 * 1000; // 時間窗口大小,單位毫秒public static final Integer MAX_COUNT = 100; // 允許的最大請求次數(shù)public static Integer curCount = 0; // 當前請求次數(shù)public static Long endTime = new Date().getTime(); // 當前時間窗口的開始時間public boolean limit() {long currentTime = new Date().getTime();// 是否已經(jīng)不在當前時間窗口范圍內了if (currentTime > endTime) {endTime = currentTime + DURATION;curCount = 1;return true;} else { // 處于當前時間窗口curCount = curCount + 1;return curCount < MAX_COUNT;}} }總結
以上是生活随笔為你收集整理的限流算法-固定时间窗口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库储存过程超简单实例
- 下一篇: fbx格式转gif_传奇战法道 角色人物