NodeSelectorSlot

NodeSelectorSlot:鍊中處理的第一個節點
責任鍊執行個體和 resource name 相關,和線程無關,是以當處理同一個resource 時,會進入同一 NodeSelectorSlot 執行個體。
是以該節點代碼主要處理:不同的 context name,同一 resource name 的場景。
如下它們都處理同一 resource(“getUserInfo” resource),但它們入口 context 不一。
結合前面的那棵樹,可得如下樹
- 清楚 NodeSelectorSlot 執行個體和 resource 一一對應即可。
ClusterBuilderSlot
- 主要建立 ClusterNode
-
阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot - 該類處理後
-
阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot - 每個 resource 對應一個 ClusterNode 執行個體,若不存在,就建立一個新執行個體。
統計意義
資料統計的。比如 getUserInfo 接口,由于從不同的 context name 開啟調用鍊,它有多個 DefaultNode 執行個體,但隻有一個 ClusterNode,通過該執行個體,即可知道該接口的 QPS。
此類還處理了 origin 不是預設值場景:
origin 代表調用方辨別,如 application-a, application-b。
當設定了 origin,會生成一個 StatisticsNode 執行個體,挂在 ClusterNode。
改下案例代碼
getUserInfo 接收到來自 application-a 和 application-b 兩個應用的請求,那麼樹會變成下面這樣:
它的作用是用來統計從 application-a 過來的通路 getUserInfo 這個接口的資訊。目前該資訊在 dashboard 不展示,畢竟沒啥用。
LogSlot
直接 fire 出去了,即先處理責任鍊後面的節點,若它們抛 BlockException,才處理。
StatisticSlot
作用
資料統計。
原理
先 fire,等後面的節點處理完畢後,再進行統計資料。
為何這樣設計?
因為後面節點是做控制,執行時可能正常通過,也可能抛 BlockException。
QPS 統計
使用滑動視窗
線程并發的統計
使用 LongAdder
接下來幾個 Slot 需要通過 dashboard 進行開啟,因為需要配置規則。
也可以寫死規則到代碼中。但是要調整數值就比較麻煩,每次都要改代碼。