色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

分布式限流簡介

冬至子 ? 來源:本木技術團隊 ? 作者:Zim ? 2023-05-16 16:40 ? 次閱讀

1 背景

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

2 算法

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

滑動窗口

滑動窗口算法的優點在于可以在滑動時間內計算出相對精確的限流數據。 想象一個簡單的限流算法, 例如限制在一分鐘內最多訪問 10 次。 我們在后端存儲的結構如下

pYYBAGRjQR6AD2p1AABFXyVVjms987.png

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

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

pYYBAGRjQS2AG2fOAABEpn05J9c911.png

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

3 后端存儲

既然說到分布式實現, 則需要考慮公共的后端存儲服務, 此處我們選擇 redis, 因為 redis 提供了方便的數據結構供我們實現滑動窗口, 主要會用到 redis 中的 map. 具體實現可以參照代碼。

實現

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

pYYBAGRjQV2AEii2AAClTM_Q-TI084.pngpYYBAGRjQWWABkLpAADqJBF8uqw450.pngpoYBAGRjQWuADmBtAAEY3eAJq3M090.png

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

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

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

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

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

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

4 考慮的問題

redis 集群問題

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

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

分布式時間問題

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

客戶端性能問題

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

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

限流服務本身的負載

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • lua腳本
    +關注

    關注

    0

    文章

    21

    瀏覽量

    7601
  • Redis
    +關注

    關注

    0

    文章

    377

    瀏覽量

    10905
收藏 人收藏

    評論

    相關推薦

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

    分布式數據
    未來加油dz
    發布于 :2023年07月03日 22:45:56

    分布式軟件系統

    分布式軟件系統分布式軟件系統(Distributed Software Systems)是支持分布式處理的軟件系統,是在由通信網絡互聯的多處理機體系結構上執行任務的系統。它包括分布式
    發表于 07-22 14:53

    LED分布式恒流原理

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

    分布式發電技術與微型電網

    幾種分布式發電簡介2.分布式發電與配電網互聯問題3.微型電網技術4.分布式發電(電源)技術應用的障礙和瓶頸5.分布式發電(電源)技術發展方向
    發表于 03-11 13:37

    分布式光纖測溫系統DTS

    關于分布式光纖測溫系統的簡介說明
    發表于 10-18 14:01

    分布式聲波傳感系統DAS

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

    如何設計分布式干擾系統?

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

    分布式系統的優勢是什么?

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

    HarmonyOS應用開發-分布式設計

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

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

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

    如何高效完成HarmonyOS分布式應用測試?

    作者:liuxun,HarmonyOS測試架構師HarmonyOS是新一代的智能終端操作系統,給開發者提供了設備發現、設備連接、跨設備調用等豐富的分布式API。隨著越來越多的開發者投入到
    發表于 12-13 18:07

    分布式電源分布式電源裝置是指什么?有何特點

    分布式電源分布式電源裝置是指與環境兼容的獨立電源,功率為數千瓦與環境兼容。這些電源由電力部門、電力用戶或第3方所有,用以滿足電力系統和用戶特定的要求。例如,對偏遠地區的用戶或商業地區、居民地
    發表于 12-29 06:51

    OpenHarmony3.1分布式技術資料合集

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

    常見的分布式供電技術有哪些?

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

    Redis實現分布式多規則限流的方式介紹

    市面上很多介紹 Redis 如何實現限流的,但是大部分都有一個缺點,就是只能實現單一的限流,比如 1 分鐘訪問 1 次或者 60 分鐘訪問 10 次這種,但是如果想一個接口兩種規則都需要滿足呢,我們的項目又是分布式項目,應該如何
    的頭像 發表于 02-26 10:07 ?539次閱讀
    Redis實現<b class='flag-5'>分布式</b>多規則<b class='flag-5'>限流</b>的方式介紹
    主站蜘蛛池模板: 91久久偷偷看嫩草影院无费| AV多人爱爱XXx| 日本一卡二卡三卡四卡无卡免费播放| 久久人妻少妇嫩草AV無碼| 韩国黄电影| 国产午夜精品自在自线之la | 精品久久久无码21P发布| 国产精品亚洲第一区二区三区| 国产3级在线观看| 给个男人都懂的网址2019| 成人亚洲乱码在线| 成人五级毛片免费播放| 把腿张开老子CAO烂你动态图| jizzjizz3d动漫| 俄罗斯人与动ZOZ0| 国产精品久久高潮呻吟无码| 国产精品1区在线播放| 国产精品一区二区欧美视频| 国产激情文学| 国产真实夫妇交换视频| 火影小南被爆羞羞网站| 久久99热在线观看7| 老师的玉足高跟鞋满足我| 嫩小幼处在线| 中国午夜伦理片| 2020久久精品永久免费| 999久久国产精品免费人妻| jk白丝袜美女被男人桶| 俄罗斯XXXXXL18| 国产午夜视频在线| 九九热视频 这里有精品| 麻豆人妻无码性色AV| 青青草 久久久| 污污内射久久一区二区欧美日韩| 亚洲A片不卡无码久久尤物| 亚洲一区在线观看无码欧美| 在线观看日本免费| av av在线| 国产精品99久久久久久动态图| 国产午夜高潮熟女精品AV| 久久久99精品成人片中文|