日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导

發(fā)布時(shí)間:2023/12/3 windows 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、Sentinel 系統(tǒng)自適應(yīng)概述


從官方了解到 Sentienl 系統(tǒng)自適應(yīng)限流是一個(gè)全局的概念,對(duì)應(yīng)用入口流量統(tǒng)一進(jìn)行統(tǒng)一控制,結(jié)合應(yīng)用的機(jī)器負(fù)載、CPU 使用率,總體平均響應(yīng)時(shí)間、入口 QPS 和并發(fā)線程數(shù)等幾個(gè)維度的監(jiān)控指標(biāo)從而決定是否調(diào)用進(jìn)行限流操作。為了有一個(gè)直觀的感受,我們可以從官方的運(yùn)維平臺(tái)看看其系統(tǒng)自適應(yīng)限流的操作界面:

RT、線程數(shù)、入口QPS這三個(gè)指標(biāo)是可以通過(guò)采集調(diào)用信息進(jìn)行統(tǒng)計(jì)計(jì)算的,那系統(tǒng)LOAD、CPU使用率是如何獲取的呢?大家可以帶著這個(gè)問(wèn)題進(jìn)入本文的學(xué)習(xí)中來(lái)。

在詳細(xì)分析系統(tǒng)自適應(yīng)實(shí)現(xiàn)原理之前我們先來(lái)思考一下 Sentinel 引入該機(jī)制的目的。

官方文檔針對(duì)這個(gè)問(wèn)題有過(guò)仔細(xì)闡述,我們先來(lái)看看官方文檔對(duì)其闡述。

引入系統(tǒng)自適應(yīng)限流的主要的目的有如下兩個(gè):

  • 保證系統(tǒng)不被拖垮
  • 在系統(tǒng)穩(wěn)定的前提下保證系統(tǒng)的吞吐量。

目前我們接觸的限流的防護(hù)思路都是設(shè)定一個(gè)指標(biāo)(闊值),例如系統(tǒng)的負(fù)載 load 超過(guò)某個(gè)闊值后就阻止或減少流量的繼續(xù)進(jìn)入,當(dāng)系統(tǒng)負(fù)載降低到某一水平后則恢復(fù)流量的進(jìn)入。通常都是被動(dòng)的,其實(shí)際效果取決于闊值設(shè)置是否合理,但往往設(shè)置合理不是一件容易的事情。

那 Sentinel 提供的系統(tǒng)自適應(yīng)是可以將設(shè)定的規(guī)則作為一個(gè)保護(hù)因子,而允許通過(guò)的流量由處理請(qǐng)求的能力來(lái)決定,即根據(jù)請(qǐng)求的響應(yīng)時(shí)間、當(dāng)前系統(tǒng)正在處理的請(qǐng)求速率來(lái)決定。

那 Sentinel 是如何實(shí)現(xiàn)的呢?接下來(lái)用源碼的手段來(lái)揭曉其實(shí)現(xiàn)原理。

2、系統(tǒng)自適應(yīng)限流原理


Sentinel 執(zhí)行系統(tǒng)限流的核心入口類(lèi)為 SystemSlot,該類(lèi)實(shí)現(xiàn)簡(jiǎn)單,如下圖所示:

SystemRuleManager#checkSystem

從這里可以看出實(shí)現(xiàn)的關(guān)鍵在于SystemRuleManager,這里是直接調(diào)用 checkSystem 進(jìn)行是否觸發(fā)其限流,那我們接下來(lái)重點(diǎn)跟蹤一下該方法的實(shí)現(xiàn)。

2.1 自適應(yīng)限流檢測(cè)流程

系統(tǒng)自適應(yīng)限流檢測(cè)具體由 SystemRuleManager 的 checkSystem 方法實(shí)現(xiàn),接下來(lái)詳細(xì)剖析其實(shí)現(xiàn)細(xì)節(jié)。

Step1:驗(yàn)證相關(guān)資源,主要包含三層驗(yàn)證:

  • 如果資源名稱(chēng)為空,則直接跳過(guò),這個(gè)是容錯(cuò)機(jī)制。如果系統(tǒng)自適應(yīng)開(kāi)關(guān)為打開(kāi),直接放行,該開(kāi)關(guān)初始化時(shí)為 false,在加載到一條系統(tǒng)自適應(yīng)配置規(guī)則時(shí)該狀態(tài)會(huì)設(shè)置為 true,具體在 loadSystemConf 中。如果資源的類(lèi)型不是入口流量(EntryType.IN),則直接放行。

Step2:從QPS為維度驗(yàn)證是否需要被限流,其實(shí)現(xiàn)關(guān)鍵點(diǎn)如下:

  • 當(dāng)前的qps,如果 ENTRY_NODE 為空則返回0,否則返回該統(tǒng)計(jì)節(jié)點(diǎn)的成功 qps,那 ENTRY_NODE 統(tǒng)計(jì)節(jié)點(diǎn)是“何許人也”,原來(lái)是 Sentinel 特定定義了一個(gè)資源,其名稱(chēng)為total_inbound_traffic,用來(lái)采集所有入口調(diào)用的信息,當(dāng)資源進(jìn)入類(lèi)型為 ENTRY_TYPE_IN 時(shí),會(huì)自動(dòng)采集信息,其具體統(tǒng)計(jì)信息在 StatisticSlot 的 entry 方法中被調(diào)用,其截圖如下:
  • 如果當(dāng)前調(diào)用的 QPS 大于設(shè)定的QPS,即觸發(fā)限流,那這個(gè) qps 又是在什么時(shí)候被設(shè)置的呢?也是在加載系統(tǒng)限流規(guī)則時(shí)被設(shè)置,如果一個(gè)應(yīng)用同一個(gè)限流點(diǎn)(LOAD、QPS)設(shè)置了多條規(guī)則,最小值生效。

Step3:關(guān)于線程數(shù)、響應(yīng)時(shí)間限流模式與QPS類(lèi)似,就不再重復(fù)介紹。

Step4:如果當(dāng)前系統(tǒng)的負(fù)載超過(guò)了設(shè)定的闊值的處理邏輯,這里就是自適應(yīng)的核心所在,并不是超過(guò)負(fù)載就限流,而是需要根據(jù)當(dāng)前系統(tǒng)的請(qǐng)求處理能力進(jìn)行綜合判斷,具體邏輯在 checkBbr 方法中實(shí)現(xiàn)。關(guān)于如何獲得系統(tǒng)負(fù)載與 checkBbr 方法稍后會(huì)詳細(xì)介紹。

Step5:如果當(dāng)前CPU的負(fù)載超過(guò)了設(shè)置的闊值,觸發(fā)限流,那在JAVA中是如何獲取CPU的使用率的呢?稍后詳細(xì)介紹。

2.2 根據(jù)系統(tǒng)負(fù)載自適應(yīng)算法詳解

正如上面的第4步驟,根據(jù)系統(tǒng) Load 的會(huì)采用 TCP BBR 算法來(lái)評(píng)估是否限流,具體實(shí)現(xiàn)代碼如下:

SystemRuleManager#checkSystem


在 Sentinel 中估算系統(tǒng)的容量是以 1s 為度量長(zhǎng)度,用該秒內(nèi)通過(guò)的最大 qps 與 最小響應(yīng)時(shí)間的乘積來(lái)表示,具體的計(jì)算細(xì)節(jié):

  • maxSuccessQps 的計(jì)算取當(dāng)前采樣窗口的最大值乘以1s內(nèi)滑動(dòng)窗口的個(gè)數(shù),這里其實(shí)并不是十分準(zhǔn)確。
  • minRt 最小響應(yīng)時(shí)間取自當(dāng)前采樣窗口中的最小響應(yīng)時(shí)間。故得出了上述計(jì)算公式,除以1000是因?yàn)?minRt 的時(shí)間單位是毫秒,統(tǒng)一為秒。從這里可以看出根據(jù)系統(tǒng)負(fù)載做限流,最終的判斷依據(jù)是線程數(shù)量。

2.3 JAVA如何獲得操作系統(tǒng)負(fù)載情況

在 Sentinel 中獲取操作系統(tǒng)負(fù)載情況的類(lèi):SystemStatusListener,每秒采集一次。

SystemStatusListener#run

原來(lái)可以通過(guò)JDK中的 com.sun.management.OperatingSystemMXBean 獲取操作系統(tǒng)相關(guān)的信息。

溫馨提示:上述只對(duì) Linux/Unix 操作系統(tǒng)有效,對(duì) windows 無(wú)效。

3、實(shí)踐思考


經(jīng)過(guò)上面的分析,Sentinel 中的系統(tǒng)自適應(yīng)其實(shí)指的是按照應(yīng)用所在機(jī)器的操作系統(tǒng)負(fù)載,再結(jié)合應(yīng)用本身的請(qǐng)求處理能力進(jìn)行的自適應(yīng),操作系統(tǒng)的負(fù)載情況可以通過(guò) top 命令輸出,其示例如下:

盡管 Sentienl 的系統(tǒng)規(guī)則配置類(lèi)型分為 LOAD、CPU、RT、線程數(shù)、入口QPS等維度進(jìn)行限流,但自適應(yīng)主要是針對(duì) LOAD 這種情況的。
Sentinel 系統(tǒng)級(jí)別的限流規(guī)則并不是針對(duì)某一個(gè)資源,而是針對(duì)應(yīng)用所有定義EntryType.IN的資源,在使用時(shí)尤其需要注意,特別是如果一個(gè)機(jī)器上部署了多個(gè)應(yīng)用,可能會(huì)造成應(yīng)用本身負(fù)載不高,但所在的機(jī)器由于其他應(yīng)用程序?qū)е沦Y源負(fù)載偏高,從而觸發(fā)限流。

作者:丁威

總結(jié)

以上是生活随笔為你收集整理的poi设置列宽自适应_Sentinel 系统自适应限流原理剖析与实战指导的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。