麻豆成人91精品二区三区,国产91在线播放,加勒比无码专区中文字幕,欧美黑人XXXX高潮猛交

×

Sentinel源碼分析,了解Sentinel的整個(gè)工作流程

分類:互聯(lián)網(wǎng)熱點(diǎn) 編輯:聊聊云計(jì)算 瀏覽量:1
2020-07-13 16:55:23

本篇內(nèi)容:

    Sentinel對(duì)性能的消耗如何 Sentinel工作流程源碼分析 Sentinel熔斷降級(jí)實(shí)現(xiàn)源碼分析 Sentinel對(duì)性能的消耗如何

Sentinel統(tǒng)計(jì)QPS使用的是時(shí)間窗口+Bucket,并且通過(guò)循環(huán)復(fù)用Bucket以減少對(duì)內(nèi)存的占用,在統(tǒng)計(jì)QPS時(shí),更是利用當(dāng)前時(shí)間戳定位Bucket,使用LongAdder統(tǒng)計(jì)時(shí)間窗口內(nèi)的請(qǐng)求成功數(shù)、失敗數(shù)、總耗時(shí)優(yōu)化了并發(fā)鎖,通過(guò)定時(shí)任務(wù)遞增時(shí)間戳避免每次都使用System獲取當(dāng)前時(shí)間??梢钥吹絊entinel在性能方面所做出的努力,Sentinel盡最大可能降低自身對(duì)應(yīng)用的影響。

Sentinel會(huì)為每個(gè)資源(接口)創(chuàng)建一個(gè)保存一分鐘內(nèi)時(shí)間窗口為1秒的Bucket數(shù)組以及一個(gè)保存一秒鐘內(nèi)以500ms為時(shí)間窗口的Bucket數(shù)組,將這兩個(gè)數(shù)組包裝為一個(gè)Node,以統(tǒng)計(jì)該接口的請(qǐng)求數(shù)據(jù)。每個(gè)Bucket記錄一個(gè)時(shí)間窗口內(nèi)的請(qǐng)求總數(shù)、失敗總數(shù)、總耗時(shí)(通過(guò)總耗時(shí)可計(jì)算平均耗時(shí))、被限流或者被熔斷的請(qǐng)求總數(shù)。

因此,Sentinel消耗的內(nèi)存至少是資源總數(shù)乘以每個(gè)資源對(duì)應(yīng)的Node占用的內(nèi)存大小,每個(gè)Node占用的內(nèi)存大小即為一個(gè)大小為2的Bucket數(shù)組和一個(gè)大小為60的Bucket數(shù)組所占用的內(nèi)存。

Sentinel工作流程源碼分析

Sentinel通過(guò)復(fù)用Bucket降低對(duì)內(nèi)存的消耗,使用LongAdder降低并發(fā)統(tǒng)計(jì)數(shù)據(jù)對(duì)性能的消耗,除這些之外,Sentinel通過(guò)責(zé)任鏈模式實(shí)現(xiàn)統(tǒng)計(jì)、限流、熔斷降級(jí)等功能,實(shí)現(xiàn)局部無(wú)鎖化。

Sentinel的基本使用:

Sentinel實(shí)現(xiàn)統(tǒng)計(jì)、限流、熔斷降級(jí)等功能由一個(gè)個(gè)ProcessorSlot完成,例如,統(tǒng)計(jì)資源當(dāng)前時(shí)間窗口的請(qǐng)求總數(shù)、失敗總數(shù)等由StatisticSlot完成,判斷當(dāng)前請(qǐng)求是否需要限流由FlowSlot完成,判斷當(dāng)前請(qǐng)求是否需要熔斷降級(jí)由DegradeSlot完成。

這些ProcessorSlot按照嚴(yán)格的順序包裝成一個(gè)鏈表,比如StatisticSlot在FlowSlot之前,F(xiàn)lowSlot在DegradeSlot之前。

ProcessorSlot的entry方法在接收到客戶端請(qǐng)求時(shí)或者客戶端向服務(wù)端發(fā)送請(qǐng)求之前被調(diào)用,exit方法則是在服務(wù)端處理完請(qǐng)求(包括異常完成)時(shí)或者客戶端發(fā)送請(qǐng)求完成時(shí)被調(diào)用。每個(gè)ProcessorSlot通過(guò)fireEntry方法或者fireExit方法向下傳遞信號(hào)。

看過(guò)Netty源碼的朋友應(yīng)該對(duì)這種設(shè)計(jì)模式的使用并不陌生,Netty也是通過(guò)責(zé)任鏈模式將處理請(qǐng)求的Handler包裝為鏈表,實(shí)現(xiàn)局部串行處理請(qǐng)求。但Sentinel的ProcessorSlot與Netty的Handler有些區(qū)別,ProcessorSlot的exit方法并不像Netty那樣是從后往前傳遞的。

我們熟悉的Shiro也是通過(guò)責(zé)任鏈實(shí)現(xiàn)(過(guò)濾器),所以Sentinel實(shí)現(xiàn)限流、熔斷并不難理解。在不考慮集群限流的情況下。當(dāng)SphU的entry方法被調(diào)用時(shí),至少會(huì)經(jīng)過(guò)StatisticSlot、FlowSlot、DegradeSlot這三個(gè)ProcessorSlot,其時(shí)序圖如下。

當(dāng)StatisticSlot的entry方法被調(diào)用時(shí),由StatisticSlot根據(jù)資源獲取資源的Node,根據(jù)當(dāng)前時(shí)間戳從Node獲取當(dāng)前時(shí)間窗口的Bucket,然后將Bucket的請(qǐng)求總數(shù)自增1。StatisticSlot在entry方法中捕獲異常,如果下游的ProcessorSlot拋出異常為BlockException或BlockException的子類,則將Bucket的限流總數(shù)自增1,否則將Bucket的異??倲?shù)自增1。

當(dāng)FlowSlot的entry方法被調(diào)用時(shí),檢查為當(dāng)前資源配置的限流規(guī)則是否滿足限流條件,如果滿足條件則拋出BlockException異常,表示當(dāng)前請(qǐng)求被限流。由于Sentinel支持集群限流,所以限流的實(shí)現(xiàn)上比較復(fù)雜,我們暫不討論。如果是單節(jié)點(diǎn)的限流,則實(shí)現(xiàn)上與熔斷降級(jí)的實(shí)現(xiàn)差不多,本篇只介紹熔斷降級(jí)的實(shí)現(xiàn)。

當(dāng)DegradeSlot的entry方法被調(diào)用時(shí),檢查為當(dāng)前資源配置的熔斷降級(jí)規(guī)則是否滿足條件,如果滿足條件則拋出DegradeException異常,表示當(dāng)前請(qǐng)求被熔斷。

Sentinel熔斷降級(jí)實(shí)現(xiàn)源碼分析

Sentinel會(huì)為每個(gè)資源(ResourceWrapper)創(chuàng)建一個(gè)Node,用于統(tǒng)計(jì)請(qǐng)求數(shù)據(jù)(請(qǐng)求總數(shù)、異??倲?shù)、被限流或被熔斷總數(shù)、總耗時(shí)),為限流和熔斷降級(jí)功能提供支持。

ResourceWrapper的name為資源名稱,也可以理解是接口url,但這樣理解是不正確的。資源名稱在我們配置限流規(guī)則或者熔斷降級(jí)規(guī)則時(shí)也用到。

ResourceWrapper的entryType為流量類型,可取值為IN和OUT,IN表示流入類型,即服務(wù)端接收客戶端請(qǐng)求;OUT為流出類型,即客戶端向服務(wù)端發(fā)起請(qǐng)求。

ResourceWrapper的resourceType為資源類型,表示是Servlet還是RPC、API網(wǎng)關(guān)、數(shù)據(jù)庫(kù)等??梢?jiàn),Sentinel還支持對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)限流、熔斷。

Sentinel提供的熔斷降級(jí)功能,不僅可以在客戶端使用,也可以在服務(wù)端使用,但一般會(huì)放在客戶端,用于流量類型為OUT類型的資源的熔斷降級(jí),保證自身不受服務(wù)端的影響,不被服務(wù)端拖垮。

判斷Sentinel的熔斷降級(jí)功能是否支持在服務(wù)端執(zhí)行,我們可通過(guò)閱讀DegradeSlot的源碼,查看是否限制了只有流量類型為EntryType.OUT時(shí)才生效。

當(dāng)DegradeSlot的entry方法被調(diào)用時(shí),由DegradeSlot調(diào)用DegradeRuleManager的checkDegrade方法檢查當(dāng)前請(qǐng)求是否滿足某個(gè)熔斷降級(jí)規(guī)則。

在學(xué)習(xí)如何使用Sentinel實(shí)現(xiàn)熔斷降級(jí)時(shí),我們是使用DegradeRuleManager加載我們配置的熔斷降級(jí)規(guī)則的,所以DegradeSlot將check邏輯才交給DegradeRuleManager去完成。

DegradeRuleManager首先根據(jù)資源名稱獲取配置的熔斷降級(jí)規(guī)則,因?yàn)槲覀兛梢詫?duì)同一個(gè)資源配置多個(gè)熔斷降級(jí)規(guī)則,所以返回的將是一個(gè)集合。然后遍歷熔斷降級(jí)規(guī)則,調(diào)用DegradeRule的passCheck方法將檢查是否需要觸發(fā)熔斷的邏輯交給DegradeRule完成。如果對(duì)一個(gè)資源配置多個(gè)熔斷降級(jí)規(guī)則,那么只要有一個(gè)熔斷降級(jí)規(guī)則滿足條件,就會(huì)觸發(fā)熔斷。

DegradeRule的passCheck方法源碼如下。

從DegradeRule的passCheck方法的源碼中,我們并未發(fā)現(xiàn)有任何地方限制熔斷降級(jí)的觸發(fā)只有流量類型為EntryType.OUT才生效,因此,熔斷降級(jí)不僅可以用于客戶端,也可以用于服務(wù)端。

熔斷降級(jí)策略支持三種:

1、平均響應(yīng)時(shí)間 (DEGRADE_GRADE_RT)

2、異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO)

3、異常數(shù) (DEGRADE_GRADE_EXCEPTION_COUNT)。

官方文檔在介紹DEGRADE_GRADE_EXCEPTION_COUNT策略的地方加了使用注意說(shuō)明:注意由于統(tǒng)計(jì)時(shí)間窗口是分鐘級(jí)別的,若 timeWindow 小于 60s,則結(jié)束熔斷狀態(tài)后仍可能再進(jìn)入熔斷狀態(tài)。

這句話并不難理解,從DegradeRule的passCheck方法源碼就能找到答案,如下圖所示。

本文轉(zhuǎn)載自微信公眾號(hào)「 Java藝術(shù)」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系 Java藝術(shù)公眾號(hào)。



聲明:免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)

送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)

需注明出處:新網(wǎng)idc知識(shí)百科

免費(fèi)咨詢獲取折扣

Loading
青青草日韩国产欧美| XXXX成人| 国产经品av| 微拍福利视频一区| 青青久草| 欧美福利一区| 亚洲无码大尺度网站| 久久久婷婷五月亚洲| 大港区| 午夜精品视频成人精品视频| 久久久亚洲精品熟女| 无码不卡一| 无码一区二区在线观看| 亚洲热图国产| 婷婷五月天在线视频| 欧美色偷偷| 91干网| aaa最黄视频| 亚洲乱码日产精品BD在线| 无码高清一| 久艹视频在线精品| 99热在线| 成熟女人毛片WWW免费版在线 | 久在线视频| 色图综合网| 乱了欧美一区精品小说| 日韩无码中文字幕无码| 国产一线二线三线www| 精品一级欧美精品播放| 中文字幕 在线 日韩| 丝袜人妻| 四虎高清影院在线观看| 美女草在线看| 欧美综合色婷婷五月| 国产操美女| 一本丁香综合久久久久不卡网站| 激情小说图区| 日本人丰满少妇| 先锋中文欧洲AV| 品久久久久久中文字幕| 日韩69AV|