日韩在线首页I俄罗斯pornI男女猛烈激情XX00高潮动态I超碰免费97I乱人伦99久久I欧美日韩成人一区I最新日韩视频在线观看I粉嫩AV四季AV绯色AVI五月导航

×

Sentinel源碼分析,了解Sentinel的整個工作流程

分類:互聯網熱點 編輯:聊聊云計算 瀏覽量:1
2020-07-13 16:55:23

本篇內容:

    Sentinel對性能的消耗如何 Sentinel工作流程源碼分析 Sentinel熔斷降級實現源碼分析 Sentinel對性能的消耗如何

Sentinel統計QPS使用的是時間窗口+Bucket,并且通過循環復用Bucket以減少對內存的占用,在統計QPS時,更是利用當前時間戳定位Bucket,使用LongAdder統計時間窗口內的請求成功數、失敗數、總耗時優化了并發鎖,通過定時任務遞增時間戳避免每次都使用System獲取當前時間。可以看到Sentinel在性能方面所做出的努力,Sentinel盡最大可能降低自身對應用的影響。

Sentinel會為每個資源(接口)創建一個保存一分鐘內時間窗口為1秒的Bucket數組以及一個保存一秒鐘內以500ms為時間窗口的Bucket數組,將這兩個數組包裝為一個Node,以統計該接口的請求數據。每個Bucket記錄一個時間窗口內的請求總數、失敗總數、總耗時(通過總耗時可計算平均耗時)、被限流或者被熔斷的請求總數。

因此,Sentinel消耗的內存至少是資源總數乘以每個資源對應的Node占用的內存大小,每個Node占用的內存大小即為一個大小為2的Bucket數組和一個大小為60的Bucket數組所占用的內存。

Sentinel工作流程源碼分析

Sentinel通過復用Bucket降低對內存的消耗,使用LongAdder降低并發統計數據對性能的消耗,除這些之外,Sentinel通過責任鏈模式實現統計、限流、熔斷降級等功能,實現局部無鎖化。

Sentinel的基本使用:

Sentinel實現統計、限流、熔斷降級等功能由一個個ProcessorSlot完成,例如,統計資源當前時間窗口的請求總數、失敗總數等由StatisticSlot完成,判斷當前請求是否需要限流由FlowSlot完成,判斷當前請求是否需要熔斷降級由DegradeSlot完成。

這些ProcessorSlot按照嚴格的順序包裝成一個鏈表,比如StatisticSlot在FlowSlot之前,FlowSlot在DegradeSlot之前。

ProcessorSlot的entry方法在接收到客戶端請求時或者客戶端向服務端發送請求之前被調用,exit方法則是在服務端處理完請求(包括異常完成)時或者客戶端發送請求完成時被調用。每個ProcessorSlot通過fireEntry方法或者fireExit方法向下傳遞信號。

看過Netty源碼的朋友應該對這種設計模式的使用并不陌生,Netty也是通過責任鏈模式將處理請求的Handler包裝為鏈表,實現局部串行處理請求。但Sentinel的ProcessorSlot與Netty的Handler有些區別,ProcessorSlot的exit方法并不像Netty那樣是從后往前傳遞的。

我們熟悉的Shiro也是通過責任鏈實現(過濾器),所以Sentinel實現限流、熔斷并不難理解。在不考慮集群限流的情況下。當SphU的entry方法被調用時,至少會經過StatisticSlot、FlowSlot、DegradeSlot這三個ProcessorSlot,其時序圖如下。

當StatisticSlot的entry方法被調用時,由StatisticSlot根據資源獲取資源的Node,根據當前時間戳從Node獲取當前時間窗口的Bucket,然后將Bucket的請求總數自增1。StatisticSlot在entry方法中捕獲異常,如果下游的ProcessorSlot拋出異常為BlockException或BlockException的子類,則將Bucket的限流總數自增1,否則將Bucket的異常總數自增1。

當FlowSlot的entry方法被調用時,檢查為當前資源配置的限流規則是否滿足限流條件,如果滿足條件則拋出BlockException異常,表示當前請求被限流。由于Sentinel支持集群限流,所以限流的實現上比較復雜,我們暫不討論。如果是單節點的限流,則實現上與熔斷降級的實現差不多,本篇只介紹熔斷降級的實現。

當DegradeSlot的entry方法被調用時,檢查為當前資源配置的熔斷降級規則是否滿足條件,如果滿足條件則拋出DegradeException異常,表示當前請求被熔斷。

Sentinel熔斷降級實現源碼分析

Sentinel會為每個資源(ResourceWrapper)創建一個Node,用于統計請求數據(請求總數、異常總數、被限流或被熔斷總數、總耗時),為限流和熔斷降級功能提供支持。

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

ResourceWrapper的entryType為流量類型,可取值為IN和OUT,IN表示流入類型,即服務端接收客戶端請求;OUT為流出類型,即客戶端向服務端發起請求。

ResourceWrapper的resourceType為資源類型,表示是Servlet還是RPC、API網關、數據庫等。可見,Sentinel還支持對數據庫的訪問限流、熔斷。

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

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

當DegradeSlot的entry方法被調用時,由DegradeSlot調用DegradeRuleManager的checkDegrade方法檢查當前請求是否滿足某個熔斷降級規則。

在學習如何使用Sentinel實現熔斷降級時,我們是使用DegradeRuleManager加載我們配置的熔斷降級規則的,所以DegradeSlot將check邏輯才交給DegradeRuleManager去完成。

DegradeRuleManager首先根據資源名稱獲取配置的熔斷降級規則,因為我們可以對同一個資源配置多個熔斷降級規則,所以返回的將是一個集合。然后遍歷熔斷降級規則,調用DegradeRule的passCheck方法將檢查是否需要觸發熔斷的邏輯交給DegradeRule完成。如果對一個資源配置多個熔斷降級規則,那么只要有一個熔斷降級規則滿足條件,就會觸發熔斷。

DegradeRule的passCheck方法源碼如下。

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

熔斷降級策略支持三種:

1、平均響應時間 (DEGRADE_GRADE_RT)

2、異常比例 (DEGRADE_GRADE_EXCEPTION_RATIO)

3、異常數 (DEGRADE_GRADE_EXCEPTION_COUNT)。

官方文檔在介紹DEGRADE_GRADE_EXCEPTION_COUNT策略的地方加了使用注意說明:注意由于統計時間窗口是分鐘級別的,若 timeWindow 小于 60s,則結束熔斷狀態后仍可能再進入熔斷狀態。

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

本文轉載自微信公眾號「 Java藝術」,可以通過以下二維碼關注。轉載本文請聯系 Java藝術公眾號。



聲明:免責聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,也不承認相關法律責任。如果您發現本社區中有涉嫌抄襲的內容,請發

送郵件至:operations@xinnet.com進行舉報,并提供相關證據,一經查實,本站將立刻刪除涉嫌侵權內容。本站原創內容未經允許不得轉載,或轉載時

需注明出處:新網idc知識百科

免費咨詢獲取折扣

Loading
主站蜘蛛池模板: 性猛交xxxxx富婆免费视频 | 亚洲va成无码人在线观看天堂 | 欧美人成在线视频 | 天天综合网在线 | 天海翼一区二区三区四区在线观看 | 国产一级淫片a按摩推澡按摩 | 国产精品高清不卡在线播放 | 伊人久久大香线蕉av五月天宝贝 | 国产7色在线 | 国产 | 国产欧美第一页 | 人妻无码不卡中文字幕系列 | 日韩av在线网址 | 亚洲最大成人网4388xx | 懂色一区二区三区久久久 | 欧美日韩国产成人在线观看 | 人妻无码久久精品 | 暖暖日本视频 | 精品久久久久久亚洲综合网 | 中国农村妇女hdxxxx | 91视频88av| 精品免费视频一区二区 | 久久久精品日韩 | 红桃视频 国产 | 777片理伦片在线观看 | 亚洲精品国产福利一二区 | 久久这里只有精品国产免费10 | 肉色丝袜一区二区 | 亚洲一区二区三区播放 | 男女激情视频网站 | 特黄视频免费看 | 传媒一区二区 | vvv国产在线观看一区二区 | 午夜福利电影网站鲁片大全 | 人妻丝袜乱经典系列 | 日韩毛片在线视频 | 日韩一区二区免费在线观看 | 国产成人av在线影院 | 国产做无码视频在线观看 | 一个人免费在线观看视频 | 看看黄色毛片 | 午夜福利不卡在线视频 | 日本少妇热妇bbbbbb | 在线视频 亚太 国产 欧美 一区二区 | 日韩性网 | 久艾草久久综合精品无码 | 农村女人十八毛片a级毛片 超碰人体 | 国产精品爽到爆呻吟高潮不挺 | 国精品午夜福利视频不卡757 | 一级持黄录像免费观看 | 国产精品调教视频一区 | 国产成人久久精品一区二区三区 | 日韩在线欧美在线 | 99re在线视频精品 | 国产人妻精品久久久久久 | 日本国产一区二区三区在线观看 | 国产精品久久这里只有精品 | 人妻被按摩师玩弄到潮喷 | 四虎永久在线精品免费一区二区 | 先锋影音xfyy5566男人资源 | 国产精品苏妲己野外勾搭 | 成人做爰高潮尖叫声免费观看 | 国产女在线| 中国少妇乱子伦视频播放 | 在线精品亚洲一区二区三区 | 亚洲中文字幕久久久一区 | 国产亚洲欧美日韩在线一区二区三区 | 无码人妻丝袜视频在线播免费 | 国产无遮挡一区二区三区毛片日本 | 国产熟睡乱子伦视频 | 色老头在线一区二区三区 | 视频在线观看一区二区 | 我要看免费毛片 | 老牛嫩草二区三区观影体验 | 国产福利一区二区麻豆 | 日本丰满熟妇videossexhd 欧美一级成人 | 在线看mv的网址入口 | 久久亚洲一区 | 桃色一区 | 欧美人与动性行为视频 | 五月天天天综合精品无码 | 又黄又爽又色又刺激的视频 | ,亚洲人成毛片在线播放 | 欧美大片免费在线观看 | 人妻无码人妻有码中文字幕在线 | 亚洲毛片无码专区亚洲a片 白嫩少妇bbw撒尿视频 | 乱人伦中文视频在线 | 日韩高清一二三区 | 亚洲乳大丰满中文字幕 | 黄色免费在线观看视频 | 国产成人精品视频ⅴa片软件竹菊 | 久久婷婷色五月综合图区 | 国内精品久久久久伊人aⅴ 在线成人欧美 | 日韩人妻熟女中文字幕a美景之屋 | 亚洲爱爱图| 性开放网站 | 日韩 亚洲 制服 欧美 综合 | 奇米777国产在线视频 | 丰满少妇熟女高潮流白浆 | 特黄特色三级在线观看 |