天天看點

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

NodeSelectorSlot

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

NodeSelectorSlot:鍊中處理的第一個節點

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

責任鍊執行個體和 resource name 相關,和線程無關,是以當處理同一個resource 時,會進入同一 NodeSelectorSlot 執行個體。

是以該節點代碼主要處理:不同的 context name,同一 resource name 的場景。

如下它們都處理同一 resource(“getUserInfo” resource),但它們入口 context 不一。

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

結合前面的那棵樹,可得如下樹

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot
  • 清楚 NodeSelectorSlot 執行個體和 resource 一一對應即可。

ClusterBuilderSlot

  • 主要建立 ClusterNode
  • 阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot
  • 該類處理後
  • 阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot
  • 每個 resource 對應一個 ClusterNode 執行個體,若不存在,就建立一個新執行個體。

統計意義

資料統計的。比如 getUserInfo 接口,由于從不同的 context name 開啟調用鍊,它有多個 DefaultNode 執行個體,但隻有一個 ClusterNode,通過該執行個體,即可知道該接口的 QPS。

此類還處理了 origin 不是預設值場景:

origin 代表調用方辨別,如 application-a, application-b。

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

當設定了 origin,會生成一個 StatisticsNode 執行個體,挂在 ClusterNode。

改下案例代碼

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

getUserInfo 接收到來自 application-a 和 application-b 兩個應用的請求,那麼樹會變成下面這樣:

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

它的作用是用來統計從 application-a 過來的通路 getUserInfo 這個接口的資訊。目前該資訊在 dashboard 不展示,畢竟沒啥用。

LogSlot

直接 fire 出去了,即先處理責任鍊後面的節點,若它們抛 BlockException,才處理。

阿裡Sentinel核心源碼解析-責任鍊模式最佳實踐(上)NodeSelectorSlotClusterBuilderSlotLogSlotStatisticSlot

StatisticSlot

作用

資料統計。

原理

先 fire,等後面的節點處理完畢後,再進行統計資料。

為何這樣設計?

因為後面節點是做控制,執行時可能正常通過,也可能抛 BlockException。

QPS 統計

使用滑動視窗

線程并發的統計

使用 LongAdder

接下來幾個 Slot 需要通過 dashboard 進行開啟,因為需要配置規則。

也可以寫死規則到代碼中。但是要調整數值就比較麻煩,每次都要改代碼。

繼續閱讀