chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

冬至子 ? 來(lái)源:本木技術(shù)團(tuán)隊(duì) ? 作者:Zim ? 2023-05-16 16:40 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1 背景

限流是生產(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ī)器一起限流的分布式限流。 分布式限流依賴公共的后端存儲(chǔ), 所以還需要自己搭建。

2 算法

說(shuō)到限流, 首先依賴的是限流的算法, 限流的算法很多包括令牌桶, 漏桶。

滑動(dòng)窗口

滑動(dòng)窗口算法的優(yōu)點(diǎn)在于可以在滑動(dòng)時(shí)間內(nèi)計(jì)算出相對(duì)精確的限流數(shù)據(jù)。 想象一個(gè)簡(jiǎn)單的限流算法, 例如限制在一分鐘內(nèi)最多訪問(wèn) 10 次。 我們?cè)诤蠖舜鎯?chǔ)的結(jié)構(gòu)如下

pYYBAGRjQR6AD2p1AABFXyVVjms987.png

假設(shè)每個(gè)框代表了一分鐘, 框中存儲(chǔ)了一分鐘內(nèi)的限流數(shù)據(jù), 那么問(wèn)題在于我們想要紅色框的限流的數(shù)據(jù)時(shí)將無(wú)法計(jì)算, 也就是說(shuō)我們的限流的時(shí)間節(jié)點(diǎn)的起止時(shí)間是固定的。 而滑動(dòng)窗口之所以為“滑動(dòng)”, 則是為了解決這個(gè)問(wèn)題誕生。 而實(shí)際上, 這個(gè)方法也是令牌桶的一種變相實(shí)現(xiàn)。

滑動(dòng)實(shí)現(xiàn)的核心思想, 在于將時(shí)間塊切分到更細(xì)的精度, 假如我們繼續(xù)將 1 分鐘切分為更小的維度, 例如 5 秒, 那么以后我們的頻率計(jì)算的時(shí)間節(jié)點(diǎn)就可以變得更精確, 例如 10:11:00 ~ 10:12:00, 10:11:05 ~ 10:12:05, 10:11:10 ~ 10:12:10 。。。 做到 5 秒的精度, 如圖

pYYBAGRjQS2AG2fOAABEpn05J9c911.png

從另一個(gè)角度來(lái)講, 一分鐘時(shí)間的間隔, 實(shí)際上也是一種滑動(dòng)的特殊情況, 只不過(guò)精度一分鐘。

3 后端存儲(chǔ)

既然說(shuō)到分布式實(shí)現(xiàn), 則需要考慮公共的后端存儲(chǔ)服務(wù), 此處我們選擇 redis, 因?yàn)?redis 提供了方便的數(shù)據(jù)結(jié)構(gòu)供我們實(shí)現(xiàn)滑動(dòng)窗口, 主要會(huì)用到 redis 中的 map. 具體實(shí)現(xiàn)可以參照代碼。

實(shí)現(xiàn)

為了保證單次限流各種操作的原子性, 我們選擇使用 lua 腳本執(zhí)行限流邏輯, 最終會(huì)返回是否達(dá)到流量限制的結(jié)果。

pYYBAGRjQV2AEii2AAClTM_Q-TI084.pngpYYBAGRjQWWABkLpAADqJBF8uqw450.pngpoYBAGRjQWuADmBtAAEY3eAJq3M090.png

key : 限流記錄的 key, 此處的 key 由外部傳入, 一般根據(jù)我們需要限流的維度來(lái)生成。 例如如果是按 ip 對(duì)某個(gè) url 做訪問(wèn)限流限制, 則 key 可能是 url:/test:ip:192.168.1.1

current time : 當(dāng)前時(shí)間, 使用服務(wù)端 redis 時(shí)間, 為了保證分布式情況下時(shí)間的一致性, 這里的使用通過(guò) redis.time 獲取并傳入 lua 腳本

duration : 限流的總時(shí)長(zhǎng), 例如 1 分鐘則是 60 * 1000 ms

limitation : 最高流量限制, 例如每分鐘 10 次, 則為 10

precision : 限流精度, 例如精度是 1s, 則為 1000 ms, 限流精度也是保證能實(shí)現(xiàn)上圖紅框內(nèi)限流的關(guān)鍵, 精度越小, 限流越精確, block 數(shù)也越多, 占用的內(nèi)存也越大。 實(shí)際上上圖的簡(jiǎn)單限流即是 duration = precision 的一種特殊情況

permits : 本次需要增加多少流量, 對(duì)于頻率來(lái)說(shuō)一般是 1, 而對(duì)于流量來(lái)說(shuō)則是數(shù)據(jù)流量的字節(jié)數(shù)

4 考慮的問(wèn)題

redis 集群?jiǎn)栴}

由于 redis 是集群環(huán)境, 集群環(huán)境下實(shí)際上直接執(zhí)行 lua 腳本是有問(wèn)題的。 試想 lua 腳本內(nèi)可能涉及到多個(gè) key 的操作, 而 redis 實(shí)際執(zhí)行節(jié)點(diǎn)的選擇也是通過(guò) key 來(lái)選擇的。 在多 key 情況下可能會(huì)造成 lua 腳本內(nèi) key 的執(zhí)行混亂, 所以我們需要先手動(dòng)選擇好 redis 節(jié)點(diǎn)。

此處我們可以先用限流的 key 將 redis 選擇出來(lái), 再將 lua 腳本傳到某個(gè) redis 節(jié)點(diǎn)執(zhí)行。 也就是我們必須要可以通過(guò)限流 key 唯一確定一個(gè) redis 節(jié)點(diǎn), 例如 url:/test:ip:192.168.1.1 是可以確定使用某個(gè) redis 節(jié)點(diǎn)的。

分布式時(shí)間問(wèn)題

分布式系統(tǒng)需要考慮多客戶端時(shí)間不一致問(wèn)題, 此處使用 redis 時(shí)間解決。

客戶端性能問(wèn)題

由于這是一個(gè)公用的限流服務(wù), 也就是所有接入該服務(wù)的應(yīng)用的每次請(qǐng)求都會(huì)調(diào)用該服務(wù), 再加上所有接入服務(wù)的應(yīng)用共用一個(gè) redis, 顯然如果客戶端使用同步等待限流服務(wù)的返回結(jié)果并不太合適, 會(huì)影響客戶端的服務(wù)調(diào)用性能。

所以我們可以使用一種折中策略, 即將限流結(jié)果保存到本地, 每次請(qǐng)求直接檢查本地限流結(jié)果是否被限流, 同時(shí)使用異步的方式調(diào)用限流服務(wù), 并在異步回調(diào)中更新限流結(jié)果。 這種做法會(huì)讓限流數(shù)據(jù)略有延遲, 但是影響不大。

限流服務(wù)本身的負(fù)載

作為限流服務(wù), 一個(gè)主要的作用是限制惡意流量對(duì)正常業(yè)務(wù)造成沖擊, 但如果所有流量都需要經(jīng)過(guò)限流服務(wù), 當(dāng)流量激增的時(shí)候, 誰(shuí)來(lái)保證限流服務(wù)自己不被壓垮? 我的建議是設(shè)定一個(gè)閾值, 當(dāng)流量超過(guò)某個(gè)閾值(一般來(lái)講, 這個(gè)閾值可以設(shè)置為 機(jī)器數(shù) * 限流閾值)時(shí), 直接退化為本地限流。

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

    關(guān)注

    0

    文章

    21

    瀏覽量

    7716
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    387

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Apache Kafka簡(jiǎn)介(2)#分布式數(shù)據(jù)

    分布式數(shù)據(jù)
    未來(lái)加油dz
    發(fā)布于 :2023年07月03日 22:45:56

    分布式軟件系統(tǒng)

    分布式軟件系統(tǒng)分布式軟件系統(tǒng)(Distributed Software Systems)是支持分布式處理的軟件系統(tǒng),是在由通信網(wǎng)絡(luò)互聯(lián)的多處理機(jī)體系結(jié)構(gòu)上執(zhí)行任務(wù)的系統(tǒng)。它包括分布式
    發(fā)表于 07-22 14:53

    LED分布式恒流原理

    本帖最后由 eehome 于 2013-1-5 09:49 編輯 1. 分布式恒流技術(shù)分布式恒流就是:在各并聯(lián)支路點(diǎn)均設(shè)立獨(dú)立恒流源,從而管理、維持、控制支路與整體線路穩(wěn)定。在使用上可視為一個(gè)
    發(fā)表于 03-09 16:47

    分布式發(fā)電技術(shù)與微型電網(wǎng)

    幾種分布式發(fā)電簡(jiǎn)介2.分布式發(fā)電與配電網(wǎng)互聯(lián)問(wèn)題3.微型電網(wǎng)技術(shù)4.分布式發(fā)電(電源)技術(shù)應(yīng)用的障礙和瓶頸5.分布式發(fā)電(電源)技術(shù)發(fā)展方向
    發(fā)表于 03-11 13:37

    分布式光纖測(cè)溫系統(tǒng)DTS

    關(guān)于分布式光纖測(cè)溫系統(tǒng)的簡(jiǎn)介說(shuō)明
    發(fā)表于 10-18 14:01

    分布式聲波傳感系統(tǒng)DAS

    基本性能指標(biāo)分布式光纖聲波傳感系統(tǒng)(DAS)性能指標(biāo)7、DAS應(yīng)用領(lǐng)域簡(jiǎn)介石油與頁(yè)巖氣壓裂聲波振動(dòng)過(guò)程監(jiān)測(cè)注:石油井下套管可能會(huì)泄露,同時(shí)井下有油水分層及其它地質(zhì)結(jié)構(gòu)變化,通過(guò)在油井順著套管一起,因
    發(fā)表于 11-09 11:48

    如何設(shè)計(jì)分布式干擾系統(tǒng)?

    什么是分布式干擾系統(tǒng)?分布式干擾系統(tǒng)是一種綜合化、一體化、小型化、網(wǎng)絡(luò)化和智能化系統(tǒng),是將眾多體積小,重量輕,廉價(jià)的小功率偵察干擾機(jī)裝置在易于投放的小型平臺(tái)上,撒布在接近***擾目標(biāo)空域地,通過(guò)指令
    發(fā)表于 08-08 06:57

    分布式系統(tǒng)的優(yōu)勢(shì)是什么?

    當(dāng)討論分布式系統(tǒng)時(shí),我們面臨許多以下這些形容詞所描述的 同類型: 分布式的、刪絡(luò)的、并行的、并發(fā)的和分散的。分布式處理是一個(gè)相對(duì)較新的領(lǐng)域,所以還沒(méi)有‘致的定義。與順序計(jì)算相比、并行的、并發(fā)的和
    發(fā)表于 03-31 09:01

    HarmonyOS應(yīng)用開(kāi)發(fā)-分布式設(shè)計(jì)

    設(shè)計(jì)理念HarmonyOS 是面向未來(lái)全場(chǎng)景智慧生活方式的分布式操作系統(tǒng)。對(duì)消費(fèi)者而言,HarmonyOS 將生活場(chǎng)景中的各類終端進(jìn)行能力整合,形成“One Super Device”,以實(shí)現(xiàn)
    發(fā)表于 09-22 17:11

    各種分布式電源的電氣特性

    PS:滲透率的概念:從字面上理解,“滲透”就是由分布式電源發(fā)出的功率進(jìn)入(滲入)到配電系統(tǒng),所謂的“率”就是由分布式電源發(fā)出的電和整個(gè)系統(tǒng)所消耗的電(或者說(shuō)總發(fā)電量)的一個(gè)比值。各種分布式電源的電氣
    發(fā)表于 07-12 07:54

    如何高效完成HarmonyOS分布式應(yīng)用測(cè)試?

    作者:liuxun,HarmonyOS測(cè)試架構(gòu)師HarmonyOS是新一代的智能終端操作系統(tǒng),給開(kāi)發(fā)者提供了設(shè)備發(fā)現(xiàn)、設(shè)備連接、跨設(shè)備調(diào)用等豐富的分布式API。隨著越來(lái)越多的開(kāi)發(fā)者投入到
    發(fā)表于 12-13 18:07

    分布式電源分布式電源裝置是指什么?有何特點(diǎn)

    分布式電源分布式電源裝置是指與環(huán)境兼容的獨(dú)立電源,功率為數(shù)千瓦與環(huán)境兼容。這些電源由電力部門(mén)、電力用戶或第3方所有,用以滿足電力系統(tǒng)和用戶特定的要求。例如,對(duì)偏遠(yuǎn)地區(qū)的用戶或商業(yè)地區(qū)、居民地
    發(fā)表于 12-29 06:51

    OpenHarmony3.1分布式技術(shù)資料合集

    1、OpenHarmony3.1的分布式硬件管理框架簡(jiǎn)介分布式硬件管理框架是為分布式硬件子系統(tǒng)提供信息管理能力的部件。分布式硬件管理框架為
    發(fā)表于 04-11 11:50

    常見(jiàn)的分布式供電技術(shù)有哪些?

      分布式供電技術(shù)是指將發(fā)電設(shè)備建設(shè)在用戶或供電系統(tǒng)端,將發(fā)電與負(fù)荷直接相連,通過(guò)局部供電的方式滿足用戶的電力需求。其主要特點(diǎn)是將傳統(tǒng)的集中式供電方式改為分散供電方式,不僅既有大型電站向小型分布式
    發(fā)表于 04-10 16:28

    Redis實(shí)現(xiàn)分布式多規(guī)則限流的方式介紹

    市面上很多介紹 Redis 如何實(shí)現(xiàn)限流的,但是大部分都有一個(gè)缺點(diǎn),就是只能實(shí)現(xiàn)單一的限流,比如 1 分鐘訪問(wèn) 1 次或者 60 分鐘訪問(wèn) 10 次這種,但是如果想一個(gè)接口兩種規(guī)則都需要滿足呢,我們的項(xiàng)目又是分布式項(xiàng)目,應(yīng)該如何
    的頭像 發(fā)表于 02-26 10:07 ?910次閱讀
    Redis實(shí)現(xiàn)<b class='flag-5'>分布式</b>多規(guī)則<b class='flag-5'>限流</b>的方式介紹