<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          阿里Sentinel源碼解析責任鏈模式的應用

          共 1347字,需瀏覽 3分鐘

           ·

          2020-12-20 11:52


          ? 點擊上方“JavaEdge”,關注公眾號

          設為“星標”,好文章不錯過!

          NodeSelectorSlot


          NodeSelectorSlot:鏈中處理的第一個節(jié)點

          責任鏈實例和 resource name 相關,和線程無關,所以當處理同一個resource 時,會進入同一 NodeSelectorSlot 實例。
          所以該節(jié)點代碼主要處理:不同的 context name,同一 resource name 的場景。

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

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

          清楚 NodeSelectorSlot 實例和 resource 一一對應即可。


          ClusterBuilderSlot


          主要創(chuàng)建 ClusterNode

          該類處理后

          每個 resource 對應一個 ClusterNode 實例,若不存在,就創(chuàng)建一個新實例。



          統(tǒng)計意義


          數(shù)據(jù)統(tǒng)計的。比如?getUserInfo?接口,由于從不同的?context name?開啟調用鏈,它有多個 DefaultNode 實例,但只有一個?ClusterNode,通過該實例,即可知道該接口的 QPS。

          此類還處理了 origin 不是默認值場景:
          origin 代表調用方標識,如 application-a, application-b。

          當設置了 origin,會生成一個 StatisticsNode 實例,掛在 ClusterNode。

          改下案例代碼

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

          它的作用是用來統(tǒng)計從 application-a 過來的訪問 getUserInfo 這個接口的信息。目前該信息在 dashboard 不展示,畢竟沒啥用。

          LogSlot


          直接 fire 出去了,即先處理責任鏈后面的節(jié)點,若它們拋 BlockException,才處理。

          StatisticSlot




          作用


          數(shù)據(jù)統(tǒng)計。



          原理


          先 fire,等后面的節(jié)點處理完畢后,再進行統(tǒng)計數(shù)據(jù)。

          為何這樣設計?
          因為后面節(jié)點是做控制,執(zhí)行時可能正常通過,也可能拋 BlockException。

          • QPS 統(tǒng)計
            使用滑動窗口

          • 線程并發(fā)的統(tǒng)計
            使用 LongAdder

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

          也可以硬編碼規(guī)則到代碼中。但是要調整數(shù)值就比較麻煩,每次都要改代碼。


          往期推薦


          大廠如何解決數(shù)值精度/舍入/溢出問題

          大廠數(shù)據(jù)庫事務實踐-事務生效就能保證正確回滾?

          線上問題事跡(一)數(shù)據(jù)庫事務居然都沒生效?

          硬核干貨:HTTP超時、重復請求必見坑點及解決方案

          給大忙人們看的Java NIO教程之Channel





          目前交流群已有?800+人,旨在促進技術交流,可關注公眾號添加筆者微信邀請進群


          喜歡文章,點個“在看、點贊、分享”素質三連支持一下~

          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  免费黄色视频网站 | 18禁免费观看网站 | 成人免费视频久久 | 蜜芽av在线观看 欧美成人免费精品 | 91麻豆精品无码人妻系列 |