99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

jf_uPRfTJDa ? 來源:5G通信 ? 2023-08-18 11:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

作者:程造洋

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

Part 01為什么需要限流呢?

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

用戶惡意高頻訪問導(dǎo)致服務(wù)宕機(jī)

網(wǎng)頁爬蟲

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

Part 02常見的限流算法介紹

2.1 計(jì)數(shù)器限流

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

優(yōu)點(diǎn):實(shí)現(xiàn)簡(jiǎn)單;

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

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

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

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

2.2 滑動(dòng)窗口限流

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

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

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

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

2.3 漏桶算法限流

漏桶算法思路很簡(jiǎn)單:水(請(qǐng)求)先進(jìn)入到漏桶里,漏桶以一定的速度出水,當(dāng)水流入速度過大,會(huì)在超過桶可接納的容量時(shí)直接溢出。漏桶算法其實(shí)很簡(jiǎn)單,可以粗略的認(rèn)為就是注水漏水過程,往桶中以任意速率流入水,以一定速率流出水,當(dāng)水超過桶容量(capacity)則丟棄,因?yàn)橥叭萘渴遣蛔兊?,保證了整體的速率。

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

缺點(diǎn):漏桶不能有效應(yīng)對(duì)突發(fā)流量,但是能起到平滑突發(fā)流量(整流)的作用,同時(shí)不支持動(dòng)態(tài)擴(kuò)容。

2.4 令牌桶算法限流

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

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

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

1)進(jìn)水口按照某個(gè)速度,向桶中放入令牌。

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

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

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

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

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

滴滴的 tollbooth

Guava RateLimiter限流

輕量級(jí)流量控制組件sentinel

redis+lua分布式限流組件

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

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

編輯:黃飛

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

    關(guān)注

    23

    文章

    4710

    瀏覽量

    95397
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2291

    瀏覽量

    96420

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

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

    標(biāo)準(zhǔn)限流電路

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

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

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

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

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

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

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

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

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

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

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

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

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

    分布式限流簡(jiǎn)介

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

    電阻如何限流不降壓

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

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

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

    限流器是啥 常見限流

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

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

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

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

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

    限流電阻怎么接入電路_限流電阻正負(fù)極嗎

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