0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

為什么需要限流?常見的限流算法有哪些

jf_uPRfTJDa ? 來源:5G通信 ? 2023-08-18 11:35 ? 次閱讀

隨著系統(tǒng)服務(wù)的不斷擴展,越來越多的用戶訪問讓我們的系統(tǒng)“不堪重負”,為了防止某些用戶惡意高頻的訪問接口信息,限流(流量限速 Rate Limit)應運而生,這時候選擇一個合適的限流算法也就尤為重要。

作者:程造洋

單位:中國移動智慧家庭運營中心智慧互聯(lián)產(chǎn)品

Part 01為什么需要限流呢?

大量正常用戶高頻訪問導致服務(wù)器宕機

用戶惡意高頻訪問導致服務(wù)宕機

網(wǎng)頁爬蟲

對于這些情況我們需要對用戶的訪問進行限流訪問,限流的目的是保護服務(wù)節(jié)點或集群底層的存儲資源,防止調(diào)用方過度使用服務(wù),引起系統(tǒng)崩潰,或者某個調(diào)用方過度的使用某個服務(wù),導致其他服務(wù)的不可用,為了維持系統(tǒng)的穩(wěn)定性和可用性,限流刻不容緩。

Part 02常見的限流算法介紹

2.1 計數(shù)器限流

計數(shù)器法是限流算法里最簡單也是最容易實現(xiàn)的一種算法,具體規(guī)則為:在指定周期內(nèi)累加訪問次數(shù),當訪問的次數(shù)達到我們設(shè)定的閾值時,觸發(fā)限流策略,當進入下一個時間周期時會將訪問次數(shù)重新清零。

優(yōu)點:實現(xiàn)簡單;

缺點:突刺現(xiàn)象,如果設(shè)置每分鐘的并發(fā)限制數(shù)量為100,在單位時間1分鐘內(nèi)的前1s,通過了100個請求,則后面的59s都無法接受任何請求,也就無法應對短時間高并發(fā),存在一定的局限性。

舉例:假設(shè)有一個惡意用戶,他在0:59時,瞬間發(fā)送了100個請求,并且1:00又瞬間發(fā)送了100個請求,那么其實這個用戶在 1秒里面,瞬間發(fā)送了200個請求。

c9386af8-3ce1-11ee-ac96-dac502259ad0.png

我們剛才規(guī)定的是1分鐘最多100個請求(規(guī)劃的吞吐量),也就是每秒鐘最多1.7個請求,用戶通過在時間窗口的重置節(jié)點處突發(fā)請求, 可以瞬間突破我們的限流限制。用戶有可能通過算法的這個漏洞,瞬間壓垮我們的應用。

2.2 滑動窗口限流

在了解滑動窗口之前我們需要先了解一下固定窗口,規(guī)定:我們單位時間處理的請求數(shù)量比如我們規(guī)定我們的一個接口一分鐘只能訪問10次的話。使用固定窗口計數(shù)器算法的話可以這樣實現(xiàn):給定一個變量counter來記錄處理的請求數(shù)量,當1分鐘之內(nèi)處理一個請求之后counter+1,1分鐘之內(nèi)的如果counter=100的話,后續(xù)的請求就會被全部拒絕。等到 1分鐘結(jié)束后,將counter回歸成0,重新開始計數(shù)。

滑動窗口算是固定窗口計數(shù)器算法的升級版。滑動窗口計數(shù)器算法相比于固定窗口計數(shù)器算法的優(yōu)化在于:它把時間以一定比例分片。例如我們的借口限流每分鐘處理100個請求,我們可以把1 分鐘分為100個窗口。每隔1秒移動一次,每個窗口一秒只能處理 不大于100(請求數(shù))/60(窗口數(shù)) 的請求, 如果當前窗口的請求計數(shù)總和超過了限制的數(shù)量的話就不再處理其他請求?;瑒臃绞饺缦聢D所示:

c9550c12-3ce1-11ee-ac96-dac502259ad0.png

很顯然,當滑動窗口的格子劃分的越多,滑動窗口的滾動就越平滑,限流的統(tǒng)計就會越精確。

2.3 漏桶算法限流

漏桶算法思路很簡單:水(請求)先進入到漏桶里,漏桶以一定的速度出水,當水流入速度過大,會在超過桶可接納的容量時直接溢出。漏桶算法其實很簡單,可以粗略的認為就是注水漏水過程,往桶中以任意速率流入水,以一定速率流出水,當水超過桶容量(capacity)則丟棄,因為桶容量是不變的,保證了整體的速率。

優(yōu)點:削峰,有大量流量進入時,會發(fā)生溢出,從而限流保護服務(wù)可用;緩沖,不至于直接請求到服務(wù)器,緩沖壓力;

缺點:漏桶不能有效應對突發(fā)流量,但是能起到平滑突發(fā)流量(整流)的作用,同時不支持動態(tài)擴容。

2.4 令牌桶算法限流

令牌桶算法以一個設(shè)定的速率產(chǎn)生令牌并放入令牌桶中,每次請求都得申請令牌,如果令牌數(shù)量不足,則拒絕請求。令牌桶算法中新請求到來時會從桶里拿走一個令牌,如果桶內(nèi)沒有令牌可拿,就拒絕服務(wù)。當然,令牌的數(shù)量也是有上限的。令牌的數(shù)量與時間和發(fā)放速率強相關(guān),時間流逝的時間越長,會不斷往桶里加入越多的令牌,如果令牌發(fā)放的速度比申請速度快,令牌桶會放滿令牌,直到令牌占滿整個令牌桶,如下圖所示。

c973d804-3ce1-11ee-ac96-dac502259ad0.png

令牌桶限流大致的規(guī)則如下:

1)進水口按照某個速度,向桶中放入令牌。

2)令牌的容量是固定的,但是放行的速度不是固定的,只要桶中還有剩余令牌,一旦請求過來就能申請成功,然后放行。

3)如果令牌的發(fā)放速度,慢于請求到來速度,桶內(nèi)就無牌可領(lǐng),請求就會被拒絕。

優(yōu)點:可以改變令牌的發(fā)放速度,方便應對突發(fā)出口流量,是選擇較多的限流算法;

缺點:實現(xiàn)復雜,相對于其他限流算法,令牌桶算法的實現(xiàn)較為復雜,對短時請求難以處理,這種情況下,可以考慮使用漏桶算法。

Part 03常見的限流器,算法庫包以及實現(xiàn)方案

滴滴的 tollbooth

Guava RateLimiter限流

輕量級流量控制組件sentinel

redis+lua分布式限流組件

redission分布式限流采用令牌桶思想和固定時間窗口

spring cloud gateway集成redis限流,但屬于網(wǎng)關(guān)層限流

編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4612

    瀏覽量

    92910
  • 計數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94584

原文標題:聊一聊系統(tǒng)限流算法

文章出處:【微信號:5G通信,微信公眾號:5G通信】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    利用三極管的限流電路設(shè)計

      在一些電流波動的場合總需要用到限流,然而限流電路多種,有些地方對成本敏感又需要有一定控制精度,推薦用下面介紹的三極管做簡單
    發(fā)表于 02-21 11:22 ?6076次閱讀
    利用三極管的<b class='flag-5'>限流</b>電路設(shè)計

    標準限流電路

    標準限流電路 圖 標準限流電路 在簡單串聯(lián)穩(wěn)
    發(fā)表于 07-20 15:50 ?1w次閱讀
    標準<b class='flag-5'>限流</b>電路

    限流器的作用_限流器的工作原理

    本文首先介紹了限流器的作用和特征,然后分析了限流器的優(yōu)缺點,最后粗略說明了限流器的工作原理并且從限流方式方面對限流器進行了分類。
    的頭像 發(fā)表于 08-02 14:56 ?2.4w次閱讀

    LED內(nèi)部不直接集成限流電阻的原因

    簡 介: 使用LED的過程中,需要在電路中設(shè)計有限流電路(可以是限流電阻,或者恒流電路)以保證LED流過的電流不要超過LED最大工作電流。使用限流電阻是在普通的LED應用中的最
    的頭像 發(fā)表于 02-11 08:05 ?4120次閱讀
    LED內(nèi)部不直接集成<b class='flag-5'>限流</b>電阻的原因

    一文詳解限流算法的實現(xiàn)方式

    不依賴外部庫的情況下,限流算法什么實現(xiàn)的思路?本文介紹了3種實現(xiàn)限流的方式。
    的頭像 發(fā)表于 05-25 12:00 ?1420次閱讀

    常用限流方式分析 怎么設(shè)計出高并發(fā)限流方案

    來源:樓仔 常用限流方式 計數(shù)器 滑動窗口 漏桶 令牌桶 Redis + Lua 分布式限流 聊聊其它 限流對比 什么是限流呢?限流是限制到
    的頭像 發(fā)表于 10-09 17:53 ?1693次閱讀

    什么是限流,怎樣使用限流?

    所有輸出電流都會流經(jīng)限流電阻,它是一個放置在運算放大器反饋回路內(nèi)的低歐姆值電阻。將限流電阻放置在反饋回路內(nèi)十分必要,這樣電壓下降就不會在輸出中顯示為錯誤。
    的頭像 發(fā)表于 11-30 11:06 ?4251次閱讀

    限流方案常用算法 常用的限流方案

    需要注意的是借助Redis實現(xiàn)的限流方案可用于分布式系統(tǒng),而guava實現(xiàn)的限流只能應用于單機環(huán)境。如果你覺得服務(wù)器端限流麻煩,可以在不改任何代碼的情況下直接使用容器
    發(fā)表于 04-08 10:50 ?424次閱讀

    分布式限流簡介

    限流是生產(chǎn)中經(jīng)常遇到的一個場景, 目前現(xiàn)有的一個工具大部分是提供單機限流的能力, 例如 google 的 guava 中提供的 RateLimiter. 但是生產(chǎn)環(huán)境大部分是分布式環(huán)境, 在多臺機器的環(huán)境下, 需要的是能對多臺機
    的頭像 發(fā)表于 05-16 16:40 ?1065次閱讀
    分布式<b class='flag-5'>限流</b>簡介

    電阻如何限流不降壓

    電阻還需要同時不降壓,這就需要對電路中的各個參數(shù)進行精密計算和詳細設(shè)計,以確保電路的穩(wěn)定性和效率。 電阻是如何起到限流作用的? 在電路中,電阻的主要作用是限制電流的流動。當電流通過電阻時,它會遇到電阻的阻力,這會
    的頭像 發(fā)表于 09-02 10:13 ?3837次閱讀

    電阻常見作用:分壓、分流和限流

    在電子線路中電阻的作用哪些,電阻主要起阻礙電流流過的作用,也是電路中使用最多的元器件,不同類型的電阻所起的作用不同,但電阻最常見的作用是分壓、分流和限流
    的頭像 發(fā)表于 09-14 15:38 ?4144次閱讀
    電阻<b class='flag-5'>常見</b>作用:分壓、分流和<b class='flag-5'>限流</b>

    限流器是啥 常見限流

    限流器通常會根據(jù)特定條件對電流進行調(diào)整。當電流超過設(shè)定的閾值時,限流器將引入額外的電阻或其他形式的阻抗,以限制電流的流動。
    的頭像 發(fā)表于 02-06 13:51 ?3728次閱讀

    分布式神器-限流器的四種限流方法

    常見限流算法包括計數(shù)器、固定窗口、滑動窗口、漏桶和令牌桶等。其中,計數(shù)器是最簡單的限流算法,它通過統(tǒng)計請求的數(shù)量來進行
    的頭像 發(fā)表于 02-06 14:17 ?1775次閱讀
    分布式神器-<b class='flag-5'>限流</b>器的四種<b class='flag-5'>限流</b>方法

    限流電阻什么作用_限流電阻選擇原則

    限流電阻在電路中起到了至關(guān)重要的作用,其主要功能包括:   限制電流:   限流電阻通過串聯(lián)在電路中,增加負載的總電阻,從而減小電流的大小。這一功能在保護電路元件免受過大電流損害方面至關(guān)重要。當電流過大時,限流電阻能
    的頭像 發(fā)表于 10-24 17:00 ?1248次閱讀

    限流電阻怎么接入電路_限流電阻正負極嗎

    限流電阻的接入電路方式主要取決于具體的應用場景和電路要求。以下是一些常見的接入方法:   一、串聯(lián)接入電路   基本串聯(lián)方式:   將限流電阻直接串聯(lián)在需要
    的頭像 發(fā)表于 10-24 17:03 ?1238次閱讀