常用限流算法

計數(shù)器算法是什么遍希?

計數(shù)器算法,是指在指定的時間周期內(nèi)累加訪問次數(shù)里烦,達到設定的閾值時凿蒜,觸發(fā)限流策略禁谦。下一個時間周期進行訪問時,訪問次數(shù)清零废封。此算法無論在單機還是分布式環(huán)境下實現(xiàn)都非常簡單州泊,使用redis的incr原子自增性,再結(jié)合key的過期時間漂洋,即可輕松實現(xiàn)遥皂。

4-6 計數(shù)器算法-1621753094321.jpg

從上圖我們來看,我們設置一分鐘的閾值是100氮发,在0:00到1:00內(nèi)請求數(shù)是60渴肉,當?shù)?:00時,請求數(shù)清零爽冕,從0開始計算仇祭,這時在1:00到2:00之間我們能處理的最大的請求為100,超過100個的請求颈畸,系統(tǒng)都拒絕乌奇。

這個算法有一個臨界問題,比如在上圖中眯娱,在0:00到1:00內(nèi)礁苗,只在0:50有60個請求,而在1:00到2:00之間徙缴,只在1:10有60個請求试伙,雖然在兩個一分鐘的時間內(nèi),都沒有超過100個請求于样,但是在0:50到1:10這20秒內(nèi)疏叨,確有120個請求,雖然在每個周期內(nèi)穿剖,都沒超過閾值蚤蔓,但是在這20秒內(nèi),已經(jīng)遠遠超過了我們原來設置的1分鐘內(nèi)100個請求的閾值糊余。

滑動時間窗口算法是什么秀又?

為了解決計數(shù)器算法的臨界值的問題,發(fā)明了滑動窗口算法贬芥。在TCP網(wǎng)絡通信協(xié)議中吐辙,就采用滑動時間窗口算法來解決網(wǎng)絡擁堵問題。

滑動時間窗口是將計數(shù)器算法中的實際周期切分成多個小的時間窗口蘸劈,分別在每個小的時間窗口中記錄訪問次數(shù)昏苏,然后根據(jù)時間將窗口往前滑動并刪除過期的小時間窗口。最終只需要統(tǒng)計滑動窗口范圍內(nèi)的小時間窗口的總的請求數(shù)即可。

4-7 滑動窗口算法.jpg

在上圖中捷雕,假設我們設置一分鐘的請求閾值是100,我們將一分鐘拆分成4個小時間窗口壹甥,這樣救巷,每個小的時間窗口只能處理25個請求,我們用虛線方框表示滑動時間窗口句柠,當前窗口的大小是2浦译,也就是在窗口內(nèi)最多能處理50個請求。隨著時間的推移溯职,滑動窗口也隨著時間往前移動精盅,比如上圖開始時,窗口是0:00到0:30的這個范圍谜酒,過了15秒后叹俏,窗口是0:15到0:45的這個范圍,窗口中的請求重新清零僻族,這樣就很好的解決了計數(shù)器算法的臨界值問題粘驰。

在滑動時間窗口算法中,我們的小窗口劃分的越多述么,滑動窗口的滾動就越平滑蝌数,限流的統(tǒng)計就會越精確。

漏桶限流算法是什么度秘?

漏桶算法的原理就像它的名字一樣顶伞,我們維持一個漏斗,它有恒定的流出速度剑梳,不管水流流入的速度有多快唆貌,漏斗出水的速度始終保持不變,類似于消息中間件阻荒,不管消息的生產(chǎn)者請求量有多大挠锥,消息的處理能力取決于消費者。

漏桶的容量=漏桶的流出速度*可接受的等待時長侨赡。在這個容量范圍內(nèi)的請求可以排隊等待系統(tǒng)的處理蓖租,超過這個容量的請求,才會被拋棄羊壹。

在漏桶限流算法中蓖宦,存在下面幾種情況:

  1. 當請求速度大于漏桶的流出速度時,也就是請求量大于當前服務所能處理的最大極限值時油猫,觸發(fā)限流策略稠茂。

  2. 請求速度小于或等于漏桶的流出速度時,也就是服務的處理能力大于或等于請求量時,正常執(zhí)行睬关。

    漏桶算法有一個缺點:當系統(tǒng)在短時間內(nèi)有突發(fā)的大流量時诱担,漏桶算法處理不了。

令牌桶限流算法是什么电爹?

令牌桶算法蔫仙,是增加一個大小固定的容器,也就是令牌桶丐箩,系統(tǒng)以恒定的速率向令牌桶中放入令牌摇邦,如果有客戶端來請求,先需要從令牌桶中拿一個令牌屎勘,拿到令牌施籍,才有資格訪問系統(tǒng),這時令牌桶中少一個令牌概漱。當令牌桶滿的時候丑慎,再向令牌桶生成令牌時,令牌會被拋棄犀概。

在令牌桶算法中立哑,存在以下幾種情況:

  1. 請求速度大于令牌的生成速度:那么令牌桶中的令牌會被取完,后續(xù)再進來的請求姻灶,由于拿不到令牌铛绰,會被限流。

  2. 請求速度等于令牌的生成速度:那么此時系統(tǒng)處于平穩(wěn)狀態(tài)产喉。

  3. 請求速度小于令牌的生成速度:那么此時系統(tǒng)的訪問量遠遠低于系統(tǒng)的并發(fā)能力捂掰,請求可以被正常處理。

    令牌桶算法曾沈,由于有一個桶的存在这嚣,可以處理短時間大流量的場景。這是令牌桶和漏桶的一個區(qū)別塞俱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐帚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子障涯,更是在濱河造成了極大的恐慌罐旗,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唯蝶,死亡現(xiàn)場離奇詭異九秀,居然都是意外死亡,警方通過查閱死者的電腦和手機粘我,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門鼓蜒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事都弹〗吭ィ” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵畅厢,是天一觀的道長锤躁。 經(jīng)常有香客問我,道長或详,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任郭计,我火速辦了婚禮霸琴,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昭伸。我一直安慰自己梧乘,他們只是感情好,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布庐杨。 她就那樣靜靜地躺著选调,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灵份。 梳的紋絲不亂的頭發(fā)上仁堪,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音填渠,去河邊找鬼弦聂。 笑死,一個胖子當著我的面吹牛氛什,可吹牛的內(nèi)容都是我干的莺葫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枪眉,長吁一口氣:“原來是場噩夢啊……” “哼捺檬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起贸铜,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤堡纬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后萨脑,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體隐轩,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年渤早,在試婚紗的時候發(fā)現(xiàn)自己被綠了职车。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖悴灵,靈堂內(nèi)的尸體忽然破棺而出扛芽,到底是詐尸還是另有隱情,我是刑警寧澤积瞒,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布川尖,位于F島的核電站,受9級特大地震影響茫孔,放射性物質(zhì)發(fā)生泄漏叮喳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一缰贝、第九天 我趴在偏房一處隱蔽的房頂上張望馍悟。 院中可真熱鬧,春花似錦剩晴、人聲如沸锣咒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽毅整。三九已至,卻和暖如春绽左,著一層夾襖步出監(jiān)牢的瞬間悼嫉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工拼窥, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留承粤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓闯团,卻偏偏與公主長得像辛臊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子房交,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1彻舰、計數(shù)器(固定窗口)算法 計數(shù)器算法是使用計數(shù)器在周期內(nèi)累加訪問次數(shù),當達到設定的限流值時候味,觸發(fā)限流策略刃唤。下一...
    ballypeng閱讀 413評論 0 0
  • 引言 在開發(fā)高并發(fā)系統(tǒng)時有三把利器用來保護系統(tǒng):緩存、降級和限流白群。今天我們要聊的就是限流(Rate Limit)尚胞,...
    香芋牛奶面包閱讀 2,241評論 0 7
  • 計數(shù)器算法 計數(shù)器算法是限流算法中最簡單的一種算法,限制在一個時間窗口內(nèi)帜慢,至多處理多少個請求笼裳。比如每分鐘最多處理1...
    長布閱讀 220評論 0 0
  • 微服務常見的一個措施就是限流唯卖,下面主要整理一下常用的限流算法以及code。目前大抵算法分兩類 1. 常規(guī)桶類算法(...
    老鼠抗大槍閱讀 1,028評論 0 1
  • 高并發(fā)的處理有三個比較常用的手段躬柬,緩存拜轨,限流和降級。緩存的使用相信很多開發(fā)者都很了解了允青,諸如redis橄碾,memca...
    菜six歲閱讀 4,346評論 1 16