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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Sentinel(四)之工作主流程

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Sentinel(四)之工作主流程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??工作主流程

Overview

在 Sentinel 里面,所有的資源都對應一個資源名稱(resourceName),每次資源調用都會創建一個?Entry?對象。Entry 可以通過對主流框架的適配自動創建,也可以通過注解的方式或調用?SphU?API 顯式創建。Entry 創建的時候,同時也會創建一系列功能插槽(slot chain),這些插槽有不同的職責,例如:

  • NodeSelectorSlot?負責收集資源的路徑,并將這些資源的調用路徑,以樹狀結構存儲起來,用于根據調用路徑來限流降級;
  • ClusterBuilderSlot?則用于存儲資源的統計信息以及調用者信息,例如該資源的 RT, QPS, thread count 等等,這些信息將用作為多維度限流,降級的依據;
  • StatisticSlot?則用于記錄、統計不同緯度的 runtime 指標監控信息;
  • FlowSlot?則用于根據預設的限流規則以及前面 slot 統計的狀態,來進行流量控制;
  • AuthoritySlot?則根據配置的黑白名單和調用來源信息,來做黑白名單控制;
  • DegradeSlot?則通過統計信息以及預設的規則,來做熔斷降級;
  • SystemSlot?則通過系統的狀態,例如 load1 等,來控制總的入口流量;

總體的框架如下:

Sentinel 將?ProcessorSlot?作為 SPI 接口進行擴展(1.7.2 版本以前?SlotChainBuilder?作為 SPI),使得 Slot Chain 具備了擴展的能力。您可以自行加入自定義的 slot 并編排 slot 間的順序,從而可以給 Sentinel 添加自定義的功能。

下面介紹一下各個 slot 的功能。

NodeSelectorSlot

這個 slot 主要負責收集資源的路徑,并將這些資源的調用路徑以樹狀結構存儲起來,用于根據調用路徑進行流量控制。

ContextUtil.enter("entrance1", "appA");Entry nodeA = SphU.entry("nodeA");if (nodeA != null) {nodeA.exit();}ContextUtil.exit();

上述代碼通過?ContextUtil.enter()?創建了一個名為?entrance1?的上下文,同時指定調用發起者為?appA;接著通過SphU.entry()請求一個 token,如果該方法順利執行沒有拋?BlockException,表明 token 請求成功。

以上代碼將在內存中生成以下結構:

machine-root/ /EntranceNode1// DefaultNode(nodeA)

注意:每個?DefaultNode?由資源 ID 和輸入名稱來標識。換句話說,一個資源 ID 可以有多個不同入口的 DefaultNode。

ContextUtil.enter("entrance1", "appA");Entry nodeA = SphU.entry("nodeA");if (nodeA != null) {nodeA.exit();}ContextUtil.exit();ContextUtil.enter("entrance2", "appA");nodeA = SphU.entry("nodeA");if (nodeA != null) {nodeA.exit();}ContextUtil.exit();

以上代碼將在內存中生成以下結構:

machine-root/ \/ \EntranceNode1 EntranceNode2/ \/ \DefaultNode(nodeA) DefaultNode(nodeA)

上面的結構可以通過調用?curl http://localhost:8719/tree?type=root?來顯示:

EntranceNode: machine-root(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) -EntranceNode1: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) --nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) -EntranceNode2: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0) --nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)t:threadNum pq:passQps bq:blockedQps tq:totalQps rt:averageRt prq: passRequestQps 1mp:1m-passed 1mb:1m-blocked 1mt:1m-total

ClusterBuilderSlot

此插槽用于構建資源的?ClusterNode?以及調用來源節點。ClusterNode?保持某個資源運行統計信息(響應時間、QPS、block 數目、線程數、異常數等)以及調用來源統計信息列表。調用來源的名稱由?ContextUtil.enter(contextName,origin)?中的?origin?標記。可通過如下命令查看某個資源不同調用者的訪問情況:curl http://localhost:8719/origin?id=caller:

id: nodeA idx origin threadNum passedQps blockedQps totalQps aRt 1m-passed 1m-blocked 1m-total 1 caller1 0 0 0 0 0 0 0 0 2 caller2 0 0 0 0 0 0 0 0

StatisticSlot

StatisticSlot?是 Sentinel 的核心功能插槽之一,用于統計實時的調用數據。

  • clusterNode:資源唯一標識的 ClusterNode 的實時統計
  • origin:根據來自不同調用者的統計信息
  • defaultnode: 根據入口上下文區分的資源 ID 的 runtime 統計
  • 入口流量的統計

Sentinel 底層采用高性能的滑動窗口數據結構?LeapArray?來統計實時的秒級指標數據,可以很好地支撐寫多于讀的高并發場景。

FlowSlot

這個 slot 主要根據預設的資源的統計信息,按照固定的次序,依次生效。如果一個資源對應兩條或者多條流控規則,則會根據如下次序依次檢驗,直到全部通過或者有一個規則生效為止:

  • 指定應用生效的規則,即針對調用方限流的;
  • 調用方為 other 的規則;
  • 調用方為 default 的規則。

DegradeSlot

這個 slot 主要針對資源的平均響應時間(RT)以及異常比率,來決定資源是否在接下來的時間被自動熔斷掉。

SystemSlot

這個 slot 會根據對于當前系統的整體情況,對入口資源的調用進行動態調配。其原理是讓入口的流量和當前系統的預計容量達到一個動態平衡。

注意系統規則只對入口流量起作用(調用類型為?EntryType.IN),對出口流量無效。可通過?SphU.entry(res, entryType)?指定調用類型,如果不指定,默認是EntryType.OUT。

更多

  • Sentinel 核心類解析

總結

以上是生活随笔為你收集整理的Sentinel(四)之工作主流程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。