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

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

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

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

分布式限流簡介

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

掃碼添加小助手

加入工程師交流群

1 背景

限流是生產(chǎn)中經(jīng)常遇到的一個場景, 目前現(xiàn)有的一個工具大部分是提供單機(jī)限流的能力, 例如 google 的 guava 中提供的 RateLimiter. 但是生產(chǎn)環(huán)境大部分是分布式環(huán)境, 在多臺機(jī)器的環(huán)境下, 需要的是能對多臺機(jī)器一起限流的分布式限流。 分布式限流依賴公共的后端存儲, 所以還需要自己搭建。

2 算法

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

滑動窗口

滑動窗口算法的優(yōu)點(diǎn)在于可以在滑動時間內(nèi)計算出相對精確的限流數(shù)據(jù)。 想象一個簡單的限流算法, 例如限制在一分鐘內(nèi)最多訪問 10 次。 我們在后端存儲的結(jié)構(gòu)如下

pYYBAGRjQR6AD2p1AABFXyVVjms987.png

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

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

pYYBAGRjQS2AG2fOAABEpn05J9c911.png

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

3 后端存儲

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

實(shí)現(xiàn)

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

pYYBAGRjQV2AEii2AAClTM_Q-TI084.pngpYYBAGRjQWWABkLpAADqJBF8uqw450.pngpoYBAGRjQWuADmBtAAEY3eAJq3M090.png

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

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

duration : 限流的總時長, 例如 1 分鐘則是 60 * 1000 ms

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

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

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

4 考慮的問題

redis 集群問題

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

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

分布式時間問題

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

客戶端性能問題

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

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

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

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

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

    關(guān)注

    0

    文章

    24

    瀏覽量

    7779
  • Redis
    +關(guān)注

    關(guān)注

    0

    文章

    390

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

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

    分布式數(shù)據(jù)
    未來加油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)定。在使用上可視為一個
    發(fā)表于 03-09 16:47

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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