国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Guava RateLimiter預(yù)熱模型

這篇具有很好參考價值的文章主要介紹了Guava RateLimiter預(yù)熱模型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本文已收錄至我的個人網(wǎng)站:程序員波特,主要記錄Java相關(guān)技術(shù)系列教程,共享電子書、Java學(xué)習(xí)路線、視頻教程、簡歷模板和面試題等學(xué)習(xí)資源,讓想要學(xué)習(xí)的你,不再迷茫。

什么是流量預(yù)熱

我們都知道在做運動之前先得來幾組拉伸之類的動作,給身體做個熱身,讓我們的身體平滑過渡到后面的劇烈運動中。流量預(yù)熱也是一樣的道理,對限流組件來說,流量預(yù)熱就類似于一種熱身運動,它可以動態(tài)調(diào)整令牌發(fā)放速度,讓流量變化更加平滑。

我們來舉一個例子:某個接口設(shè)定了100個Request每秒的限流標(biāo)準(zhǔn) ,同時使用令牌桶算法做限流。假如當(dāng)前時間窗口內(nèi)都沒有Reques t過來,那么令牌桶中會裝滿100個令牌。如果在下一秒突然涌入100個請求,這些請求會迅速消耗令牌,對服務(wù)的瞬時沖擊會比較大。因此我們需要一種類似“熱身運動”的緩沖機制,根據(jù)桶內(nèi)的令牌數(shù)量動態(tài)控制令牌的發(fā)放速率,讓忙時流量和閑時流量可以互相平滑過渡。

流量預(yù)熱的做法

我們以Guava中的RateLimiter為例,看看流量預(yù)熱在RateLimiter中是如何運作的,我們用下面的狀態(tài)轉(zhuǎn)換圖來展示整個過程:

Guava RateLimiter預(yù)熱模型,分布式,guava,RateLimiter,流量預(yù)熱

橫坐標(biāo)是令牌桶的當(dāng)前容量,縱坐標(biāo)是令牌發(fā)放速率,我們先從橫坐標(biāo)來分析

橫坐標(biāo)

下面兩種場景會導(dǎo)致橫坐標(biāo)的變化:

  1. 閑時流量流量較小或者壓根沒流量的時候,橫坐標(biāo)會逐漸向右移動,表示令牌桶中令牌數(shù)量增多
  2. 忙時流量當(dāng)訪問流量增大的時候,橫坐標(biāo)向左移動,令牌桶中令牌數(shù)量變少

橫軸有兩個重要的坐標(biāo),一個是最右側(cè)的“令牌桶最大容量”,這個不難理解。還有一個是Half容量,它是一個關(guān)鍵節(jié)點,會影響令牌發(fā)放速率。

縱坐標(biāo)

縱坐標(biāo)表示令牌的發(fā)放速率,這里有3個標(biāo)線,分別是穩(wěn)定時間間隔,2倍間隔,3倍間隔。

這里間隔的意思就是隔多長時間發(fā)放一個令牌,而所謂穩(wěn)定間隔就是一個基準(zhǔn)時間間隔。假如我們設(shè)置了每秒10個令牌的限流規(guī)則,那么穩(wěn)定間隔也就是1s/10=0.1秒,也就是說每隔0.1秒發(fā)一個令牌。相應(yīng)的,3倍間隔的數(shù)值是用穩(wěn)定間隔乘以系數(shù)3,比如上面這個例子中3倍間隔就是0.3秒。

運作模式

了解了橫坐標(biāo)和縱坐標(biāo)的含義之后,讓我們來試著理解預(yù)熱模型的用例。繼續(xù)沿用上面10r/s的限流設(shè)置,穩(wěn)定間隔=0.1s,3x間隔是0.3s。

我們先考慮閑時到忙時的流量轉(zhuǎn)變,假定當(dāng)前我們處于閑時流量階段,沒幾個訪問請求,這時令牌桶是滿的。接著在下一秒突然涌入了10個請求,這些請求開始消耗令牌桶中的令牌。在初始階段,令牌的放行速度比較慢,在第一個令牌被消耗以后,后面的請求要經(jīng)過3x時間間隔也就是0.3s才會獲取第二塊令牌。隨著令牌桶中令牌數(shù)量被逐漸消耗,當(dāng)令牌存量下降到最大容量一半的時候(Half位置),令牌放行的速率也會提升,以穩(wěn)定間隔0.1s發(fā)放令牌。

反過來也一樣,在流量從忙時轉(zhuǎn)變?yōu)殚e時的過程中,令牌發(fā)放速率是由快到慢逐漸變化。起始階段的令牌放行間隔是0.1s,隨著令牌桶內(nèi)令牌逐漸增多,當(dāng)令牌的存量積累到最大容量的一半后,放行令牌的時間間隔進一步增大為0.3s。

RateLimiter正是通過這種方式來控制令牌發(fā)放的時間間隔,從而使流量的變化更加平滑。

核心代碼

理解了預(yù)熱模型的運作流程之后,我們來看一下具體代碼是如何實現(xiàn)的。

實現(xiàn)流量預(yù)熱的類是SmoothWarmingUp,它是SmoothRateLimiter的一個內(nèi)部類,我們重點關(guān)注一個doSetRate方法,它是計算橫縱坐標(biāo)系關(guān)鍵節(jié)點的方法,先來看一下SmoothRateLimiter這個父類中定義的方法

//permitsPerSecond表示每秒可以發(fā)放的令牌數(shù)量
@Override
final void doSetRate(double permitsPerSecond, long nowMicros) {
  resync(nowMicros);
  
  //計算穩(wěn)定間隔,使用1s除以令牌桶容量
  double stableIntervalMicros = SECONDS.toMicros(1L);
  this.stableIntervalMicros = stableIntervalMicros;
  
  //調(diào)用SmoothWarmingUp類中重載的doSetRate方法
  doSetRate(permitsPerSecond, stableIntervalMicros); 
}

父類在這里的作用主要是計算出了穩(wěn)定時間間隔(使用1s/每秒放行數(shù)量的公式來計算得出),然后預(yù)熱時間、三倍間隔等是在子類的doSetRate方法中實現(xiàn)的。

接下來我們看子類SmoothWarmingUp中的doSetRate做了什么

@Override
void doSetRate(double permitsPerSecond, double stableIn tervalMicros) {
  double oldMaxPermits = maxPermits;
  
  //maxPermits表示令牌桶內(nèi)最大容量,它由我們設(shè)置的預(yù)熱時間除以穩(wěn)定時間間隔
  maxPermits = warmupPeriodMicros / stableIntervalMicros

  //這句不用解釋了吧,halfPermits是最大容量的一半halfPermits =maxPermits / 2.0;
  // coldIntervalMicros就是我們前面寫到的3倍間隔,通過穩(wěn)定間//穩(wěn)定間隔是0.1,3倍間隔是0.2,那么平均間隔是0.2
  double coldIntervalMicros = stableIntervalMicros * 3

  //slope的意思是斜率,也就是前面我們圖中預(yù)熱階段中畫出的斜線//它的計算過程就是一個簡單的求斜率公式
  slope = (coldIntervalMicros - stableIntervalMicros)

  //計算目前令牌桶的令牌個數(shù)
  if (oldMaxPermits == Double.POSITIVE_INFINITY) {
    //如果令牌桶最大容量是無窮大,則設(shè)置當(dāng)前可用令牌數(shù)為0 //說實話這段邏輯沒什么用
    storedPermits = 0.0;
  } else {
    storedPermits = (oldMaxPermits == 0.0) 
      ? maxPermits//初始化的狀態(tài)是3x間隔
      : storedPermits * maxPermits / oldMaxPermits;
  }
}

通過上面的兩個函數(shù),RateLimiter限流器就對maxPermitsslope(預(yù)熱期斜率)兩個變量做了初始化配置。我把關(guān)鍵步驟都注釋在了代碼里,大家理解了之后,可以嘗試去閱讀這個類的其他方法,弄清maxPermitsslope是如何影響令牌發(fā)放速率的。文章來源地址http://www.zghlxwxcb.cn/news/detail-802694.html

到了這里,關(guān)于Guava RateLimiter預(yù)熱模型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • java進行系統(tǒng)的限流實現(xiàn)--Guava RateLimiter、簡單計數(shù)、滑窗計數(shù)、信號量、令牌桶

    本文主要介紹了幾種限流方法:Guava RateLimiter、簡單計數(shù)、滑窗計數(shù)、信號量、令牌桶,漏桶算法和nginx限流等等 1、引入guava集成的工具 pom.xml 文件 demo代碼實現(xiàn) 2.令牌桶算法 3、滑窗計數(shù)器 4、信號量

    2024年02月09日
    瀏覽(17)
  • 自定義redission裝配和集成分布式開源限流業(yè)務(wù)組件ratelimiter-spring-boot-starter的正確姿勢

    自定義redission裝配和集成分布式開源限流業(yè)務(wù)組件ratelimiter-spring-boot-starter的正確姿勢 ??由于使用了redisson-spring-boot-starter,在自定義redisson裝配的時候會被redisson-spring-boot-starter里面的start默認(rèn)裝配了,同時在使用開源分布式限流組件ratelimiter-spring-boot-starter的時候,這個里面

    2024年02月07日
    瀏覽(27)
  • 【分布式】大模型分布式訓(xùn)練入門與實踐 - 04

    【分布式】NCCL部署與測試 - 01 【分布式】入門級NCCL多機并行實踐 - 02 【分布式】小白看Ring算法 - 03 【分布式】大模型分布式訓(xùn)練入門與實踐 - 04 數(shù)據(jù)并行(Distributed Data Parallel)是一種用于加快深度學(xué)習(xí)模型訓(xùn)練速度的技術(shù)。在過去,訓(xùn)練大型模型往往受限于單卡訓(xùn)練的瓶頸

    2024年02月08日
    瀏覽(70)
  • 【分布式訓(xùn)練】基于PyTorch進行多GPU分布式模型訓(xùn)練(補充)

    【分布式訓(xùn)練】基于PyTorch進行多GPU分布式模型訓(xùn)練(補充)

    簡介: 在PyTorch中使用DistributedDataParallel進行多GPU分布式模型訓(xùn)練。 原文鏈接:https://towardsdatascience.com/distributed-model-training-in-pytorch-using-distributeddataparallel-d3d3864dc2a7 隨著以ChatGPT為代表的大模型的不斷涌現(xiàn),如何在合理的時間內(nèi)訓(xùn)練大模型逐漸成為一個重要的研究課題。為了解

    2024年02月16日
    瀏覽(27)
  • 算法、語言混編、分布式鎖與分布式ID、IO模型

    算法、語言混編、分布式鎖與分布式ID、IO模型

    數(shù)據(jù)結(jié)構(gòu)和算法是程序的基石。我們使用的所有數(shù)據(jù)類型就是一種數(shù)據(jù)結(jié)構(gòu)(數(shù)據(jù)的組織形式),寫的程序邏輯就是算法。 算法是指用來操作數(shù)據(jù)、解決程序問題的一組方法。 對于同一個問題,使用不同的算法,也許最終得到的結(jié)果是一樣的,但在過程中消耗的資源(空間

    2024年02月08日
    瀏覽(21)
  • 分布式存儲測試模型

    分布式存儲測試模型 (1) Cosbench 可以通過對象接口,模擬對象數(shù)據(jù)訪問時數(shù)據(jù)高并發(fā)以及大帶寬寫入數(shù)據(jù)時海量小文件數(shù)據(jù)寫入的 OPS( 每秒可以讀取或者寫入的文件數(shù)量 ) 以及大容量數(shù)據(jù)寫入時的帶寬 ( 每秒寫入和讀取的數(shù)據(jù)量 ) 性能。 (2) Vdbench 可 基 于 文 件 系 統(tǒng), 模 擬

    2024年02月11日
    瀏覽(15)
  • 分布式鏈路追蹤專欄,Spring Cloud Sleuth:分布式鏈路追蹤之通信模型設(shè)計

    分布式鏈路追蹤專欄,Spring Cloud Sleuth:分布式鏈路追蹤之通信模型設(shè)計

    Spring Cloud Sleuth ?賦予分布式跟蹤的 ?Spring Boot? 自動配置的一鍵解決方案。 Spring Cloud Sleuth? 是基于 ?Brave? 的封裝,也是很多公司采用開源加自研的最佳解決方案。 那么從作為架構(gòu)師或者技術(shù)專家如何去借鑒優(yōu)秀框架的設(shè)計理念和思想,本次? Chat? 將開啟作者既分布式鏈路

    2024年01月19日
    瀏覽(27)
  • 大語言模型的分布式訓(xùn)練

    什么是大語言模型 訓(xùn)練方式 面臨的挑戰(zhàn) 什么是分布式計算 如何實現(xiàn) 拆分邏輯 分發(fā)邏輯 大語言模型的分布式訓(xùn)練 數(shù)據(jù)并行 模型并行 流水線并行 張量并行 通信 PS NCCL是Nvidia Collective multi-GPU Communication Library的簡稱,它是一個實現(xiàn)多GPU的collective communication通信(all-gather, red

    2024年02月10日
    瀏覽(28)
  • 大模型學(xué)習(xí)筆記08——分布式訓(xùn)練

    模型規(guī)模的擴大,對硬件(算力、內(nèi)存)的發(fā)展提出要求。然而,因為內(nèi)存墻的存在,單一設(shè)備的算力及容量,受限于物理定律,持續(xù)提高芯片的集成越來越困難,難以跟上模型擴大的需求。 為了解決算力增速不足的問題,人們考慮用多節(jié)點集群進行分布式訓(xùn)練,以提升算力

    2024年01月23日
    瀏覽(27)
  • ET介紹——分布式Actor模型

    在討論Actor模型之前先要討論下ET的架構(gòu),游戲服務(wù)器為了利用多核一般有兩種架構(gòu),單線程多進程跟單進程多線程架構(gòu)。兩種架構(gòu)本質(zhì)上其實區(qū)別不大,因為游戲邏輯開發(fā)都需要用單線程,即使是單進程多線程架構(gòu),也要用一定的方法保證單線程開發(fā)邏輯。ET采用的是單線程

    2024年02月05日
    瀏覽(14)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包