中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Sentinel中怎么利用令牌桶實現預熱

發布時間:2021-08-06 15:21:01 來源:億速云 閱讀:321 作者:Leah 欄目:編程語言

本篇文章為大家展示了Sentinel中怎么利用令牌桶實現預熱,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

  

一、流控效果源碼結構

在FlowRule更新緩存時,根據配置的不同類型初始化不同的流控效果處理類。 

1.流控效果封裝入口
 

Sentinel中怎么利用令牌桶實現預熱

2.分發不同的控制類
 

Sentinel中怎么利用令牌桶實現預熱

3.流控控制類圖
 

Sentinel中怎么利用令牌桶實現預熱

二、快速失敗

快速失敗即發送流控時拋出FlowException。 

1.快速失敗流程
 

Sentinel中怎么利用令牌桶實現預熱

備注
@1 獲取當前已經使用的線程數或者QPS
@2 與閾值進行判斷,是否允許本次通行
@3 QPS流控并且prioritized設置為true表示預占用令牌
@4 大于閾值觸發流控
@5 小于閾值允許通行

2.預占用令牌
 

預占用令牌:當基于QPS流控時并且prioritized設置為true,表示當前時間窗口令牌不夠時,預占用下個時間窗口的令牌并返回需要等待的時間。

Sentinel中怎么利用令牌桶實現預熱

備注:在不考慮優先級(預占用)令牌的情況,快速失敗比較簡單。

三、令牌桶原理

預熱模式緩慢增加流量的一種方式,避免瞬間流量將系統壓垮。
1.令牌桶圖示
 

Sentinel中怎么利用令牌桶實現預熱

工作過程

  • 請求流量從令牌桶中獲取令牌,持有令牌放行,否則被拒

  • 假如設置閾值每秒允許100個請求通過,則請求發送速率r=100/s

  • 需要令牌生產速率為1/r,即1/100每10毫秒產生一個令牌

  • 令牌桶容量為b已滿多余的令牌將被丟棄

  • 令牌桶為空請求被拒

  • 允許突發流量最大突發流量為令牌桶容量b

  • 請求通過相應的令牌從令牌桶中移除

2.令牌桶限流原理
 

假如系統平時流量很低,突然陡增的流量需要緩慢增加。具體到令牌桶,可以通過控制令牌的生產速率來對流量進行控制。令牌生產速率如何控制?

我們在使用sentinel設置QPS的預熱流控時,需要設置閾值count和預熱時長warmUpPeriodInSec,下面梳理下與下圖坐標圖的關系。

Sentinel中怎么利用令牌桶實現預熱

坐標圖說明

參數說明
x軸表示令牌桶中的令牌數量
y軸生產一個令牌需要的時間(秒)
stableInterval穩定生產一個令牌需要的時間
coldInterval生產一個令牌需要的最大時長,與冷啟動因子coldFactor有關,可以通過-Dcsp.sentinel.flow.cold.factor設置,默認為3。
warmUpPeriodInSec預熱時長,默認為10秒。對應到坐標圖中為(2)梯形面積
thresholdPermits(warningToken)令牌桶中的一個閾值,超過該值時開啟預熱
maxPermits(maxToken)令牌桶中最大令牌數

換算關系

  • count,已知由用戶設置,例如每秒允許通過100個請求

  • warmUpPeriodInSec,已知由用戶設置,默認為10秒,時間區域上紅色(2)梯形區域

  • coldFactor,已知默認為3

公式一:stableInterval = 1/count公式二:coldInterval = stableInterval * coldFactor

備注:由于coldFactor默認為3,y軸stableInterval~coldInterval的距離是0~stableInterval的距離兩倍,時間區域上紅色(2)梯形區域是紅色1的長方形區域的兩倍。

公式三:坐標時間(1)長方形區域面積 = 長(thresholdPermits(warningToken)) * 寬(stableInterval)公式四:坐標時間(1)長方形區域面積 = 0.5 * warmUpPeriodInSec公式五:thresholdPermits(warningToken)=0.5 * warmUpPeriodInSec/stableInterval

備注:梯形的面積 = (上低+下低)* 高 ? 2 推導出maxPermits(maxToken)的值。

公式六:maxPermits(maxToken) = thresholdPermits(warningToken) + 2 * warmUpPeriodInSec ? (stableInterval + coldInterval)

備注:由斜率公式k=(y1-y2)?(x1-x2),得出斜率如下。

slope = (coldInterval-stableInterval)?(maxPermits(maxToken)-thresholdPermits(warningToken))

原理概述

當令牌桶中的令牌數小于thresholdPermits(warningToken)時,令牌按照固定速率生產,請求流量穩定。當令牌數大于thresholdPermits(warningToken)時,開啟預熱。此段時期,生產的令牌的速率小于令牌滑落的速度,一段時間后,令牌小于等于thresholdPermits(warningToken),請求回歸到穩定狀態,預熱結束。

四、預熱源碼分析

1.WarmUpController構造函數
 

Sentinel中怎么利用令牌桶實現預熱

備注:此部分主要計算了warningToken閾值、最大令牌數maxToken、斜率slope,詳細推導過程見原理部分。

2.請求判斷邏輯
 

Sentinel中怎么利用令牌桶實現預熱

3.令牌的生產和滑落
 

Sentinel中怎么利用令牌桶實現預熱

Sentinel中怎么利用令牌桶實現預熱

備注:從代碼可以看出sentinel中桶中的令牌生產和移除是在下次請求到來時一起處理的,另外Sentinel提供的令牌生產公式與當前時間currentTime有關系,如果一個冷系統好久沒有流量,瞬間來了很大流量,此時的桶中令牌數會直接到達最大值maxToken,這也是官方提供的曲線圖中開始流量比較陡的原因。

Sentinel中怎么利用令牌桶實現預熱

上述內容就是Sentinel中怎么利用令牌桶實現預熱,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

文登市| 朝阳县| 靖边县| 临沂市| 千阳县| 桃园县| 镇巴县| 红安县| 秭归县| 林口县| 台中县| 文昌市| 娱乐| 托里县| 南充市| 呼和浩特市| 洛南县| 鞍山市| 黑水县| 宿迁市| 临湘市| 榆中县| 济南市| 商南县| 亚东县| 紫云| 牡丹江市| 健康| 睢宁县| 江都市| 紫金县| 全州县| 新蔡县| 新乡县| 沛县| 彭水| 广水市| 金门县| 五大连池市| 苏州市| 牟定县|