久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Sentinel擴展機制是什么

173次閱讀
沒有評論

共計 3069 個字符,預(yù)計需要花費 8 分鐘才能閱讀完成。

這篇文章主要介紹“Sentinel 擴展機制是什么”,在日常操作中,相信很多人在 Sentinel 擴展機制是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Sentinel 擴展機制是什么”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學(xué)習(xí)吧!

Sentinel
提供多樣的 SPI 接口用于提供擴展的能力。用戶可以在用同一個 sentinel-core 的基礎(chǔ)上自行擴展接口實現(xiàn),從而可以方便地給 Sentinel 添加自定義的邏輯。

初始化邏輯擴展機制

為了統(tǒng)一初始化的流程,我們抽象出了
InitFunc
接口代表 Sentinel 的一些初始化邏輯,如:

注冊動態(tài)規(guī)則源(

注冊 StatisticSlot 回調(diào)函數(shù)(

啟動 Command Center

初始化心跳發(fā)送

我們可以通過注解設(shè)置
InitFunc
執(zhí)行的優(yōu)先級。當(dāng)應(yīng)用首次訪問資源時,注冊的初始化函數(shù)會依次執(zhí)行。若希望手動提前觸發(fā)初始化,可以在相應(yīng)的位置(如 Spring Bean)調(diào)用
InitExecutor.doInit()
函數(shù),重復(fù)調(diào)用只會執(zhí)行一次。

Slot Chain 擴展機制

Sentinel 內(nèi)部是通過一系列的 slot 組成的 slot chain 來完成各種功能的,包括構(gòu)建調(diào)用鏈、調(diào)用數(shù)據(jù)統(tǒng)計、規(guī)則檢查等。各個 slot 之間的順序非常重要。Sentinel 將
SlotChainBuilder
作為 SPI 接口進行擴展,使得 Slot Chain 具備了擴展的能力。用戶可以自行加入自定義的 slot 并編排 slot 間的順序,從而可以給 Sentinel 添加自定義的功能。

比如我們想要在請求 pass 后記錄當(dāng)前的 context 和資源信息,則可以實現(xiàn)一個簡單的 slot:

public class DemoSlot extends AbstractLinkedProcessorSlot DefaultNode  { @Override
 public void entry(Context context, ResourceWrapper resourceWrapper, DefaultNode node, int count, Object... args)
 throws Throwable { System.out.println( Current context:   + context.getName());
 System.out.println(Current entry resource:   + context.getCurEntry().getResourceWrapper().getName());
 fireEntry(context, resourceWrapper, node, count, args);
 } @Override
 public void exit(Context context, ResourceWrapper resourceWrapper, int count, Object... args) { System.out.println( Exiting for entry on DemoSlot:   + context.getCurEntry().getResourceWrapper().getName());
 fireExit(context, resourceWrapper, count, args);
 }
}

然后實現(xiàn)一個
SlotChainBuilder,可以在
DefaultSlotChainBuilder
的基礎(chǔ)上將我們新的 slot 添加到鏈的尾部(當(dāng)然也可以不用 DefaultSlotChainBuilder,自由組合現(xiàn)有的 slot):

package com.alibaba.csp.sentinel.demo.slot;public class DemoSlotChainBuilder implements SlotChainBuilder { @Override
 public ProcessorSlotChain build() { ProcessorSlotChain chain = new DefaultSlotChainBuilder().build();
 chain.addLast(new DemoSlot()); return chain;
 }
}

最后在
resources/META-INF/services
目錄下的 SPI 配置文件
com.alibaba.csp.sentinel.slotchain.SlotChainBuilder
中添加上實現(xiàn)的 SlotChainBuilder 的類名即可生效:

# Custom slot chain buildercom.alibaba.csp.sentinel.demo.slot.DemoSlotChainBuilder

Sentinel 的熱點限流模塊就是利用了 Slot Chain 的擴展機制來將熱點限流功能添加到原有的功能鏈中。

StatisticSlot Callback

之前
StatisticSlot
里面包含了太多的邏輯,像普通 QPS 和 熱點參數(shù) QPS 的 addPass/addBlock 等邏輯統(tǒng)計都在
StatisticSlot
里面,各個邏輯都雜糅在一起,不利于擴展。因此有必要為
StatisticSlot
抽象出一系列的 callback,從而使 StatisticSlot 具備基本的擴展能力,并將一系列的邏輯從
StatisticSlot
解耦出來,更為清晰。目前 Sentinel 提供了兩種 callback:

ProcessorSlotEntryCallback:包含
onPass
onBlocked
兩個回調(diào)函數(shù),分別對應(yīng)請求通過 StatisticSlot 和請求被 blocked 的時候執(zhí)行。

ProcessorSlotExitCallback:包含
onExit
回調(diào)函數(shù),當(dāng)請求經(jīng) StatisticSlot exit 的時候執(zhí)行。

用戶只需將實現(xiàn)的 callback 注冊到
StatisticSlotCallbackRegistry
即可生效。

動態(tài)規(guī)則源

Sentinel 的
動態(tài)規(guī)則數(shù)據(jù)源
用于從外部的存儲中讀取及寫入規(guī)則。Sentinel 將動態(tài)規(guī)則數(shù)據(jù)源劃分為兩種類型:讀數(shù)據(jù)源(ReadableDataSource)和寫數(shù)據(jù)源(WritableDataSource),從而使不同類型的數(shù)據(jù)源職責(zé)更加清晰:

讀數(shù)據(jù)源僅負責(zé)監(jiān)聽或輪詢讀取遠程存儲的變更。

寫數(shù)據(jù)源僅負責(zé)將規(guī)則變更寫入到規(guī)則源中。

我們只需要自己實現(xiàn)動態(tài)規(guī)則源,然后將其注冊至對應(yīng)的 RuleManager 上,這樣就可以實時地配置規(guī)則并進行拉取 / 推送了。注冊動態(tài)規(guī)則源時可以借助 Sentinel 的
InitFunc
SPI 在初始化時自動注冊。

Transport 擴展機制

CommandCenter 可擴展:用戶可以用不同的網(wǎng)絡(luò)協(xié)議或不同的庫來實現(xiàn) Transport API Server。

HeartbeatSender 可擴展:用戶可以用不同的網(wǎng)絡(luò)協(xié)議和心跳策略來實現(xiàn)心跳發(fā)送(上報到控制臺)。

CommandHandler 可擴展:用戶可以自行實現(xiàn)
CommandHandler
并注冊到 SPI 配置文件中來為 CommandCenter 添加自定義的命令。

到此,關(guān)于“Sentinel 擴展機制是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-16發(fā)表,共計3069字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 奇台县| 三原县| 昭觉县| 安远县| 定兴县| 盐池县| 大厂| 石门县| 南漳县| 托克逊县| 青神县| 郸城县| 阳曲县| 团风县| 牟定县| 清水河县| 镇远县| 刚察县| 新干县| 菏泽市| 会泽县| 博乐市| 湘西| 宿迁市| 商洛市| 福建省| 阳信县| 万安县| 浮梁县| 沂南县| 昌图县| 辽宁省| 芦溪县| 兴和县| 阿克| 佛山市| 平定县| 秀山| 广丰县| 乐东| 上饶市|