0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Sentinel擴(kuò)展性設(shè)計(jì)機(jī)制分析

電子設(shè)計(jì) ? 2018-10-26 10:03 ? 次閱讀

Sentinel 提供多樣的 SPI 接口用于提供擴(kuò)展的能力。用戶(hù)可以在用同一個(gè) sentinel-core 的基礎(chǔ)上自行擴(kuò)展接口實(shí)現(xiàn),從而可以方便地給 Sentinel 添加自定義的邏輯。 初始化邏輯擴(kuò)展機(jī)制 為了統(tǒng)一初始化的流程,我們抽象出了 InitFunc 接口代表 Sentinel 的一些初始化邏輯,如: 注冊(cè)動(dòng)態(tài)規(guī)則源(示例) 注冊(cè) StatisticSlot 回調(diào)函數(shù)(示例) 啟動(dòng) Command Center 初始化心跳發(fā)送 我們可以通過(guò)注解設(shè)置 InitFunc 執(zhí)行的優(yōu)先級(jí)。

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

初始化邏輯擴(kuò)展機(jī)制

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

注冊(cè)動(dòng)態(tài)規(guī)則源(示例)

注冊(cè) StatisticSlot 回調(diào)函數(shù)(示例)

啟動(dòng) Command Center

初始化心跳發(fā)送

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

Slot Chain 擴(kuò)展機(jī)制

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

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

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

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

# Custom slot chain builder

com.alibaba.csp.sentinel.demo.slot.DemoSlotChainBuilder

Sentinel 的熱點(diǎn)限流模塊就是利用了 Slot Chain 的擴(kuò)展機(jī)制來(lái)將熱點(diǎn)限流功能添加到原有的功能鏈中。

StatisticSlot Callback

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

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

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

用戶(hù)只需將實(shí)現(xiàn)的 callback 注冊(cè)到 StatisticSlotCallbackRegistry 即可生效。

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

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

讀數(shù)據(jù)源僅負(fù)責(zé)監(jiān)聽(tīng)或輪詢(xún)讀取遠(yuǎn)程存儲(chǔ)的變更。

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

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

Transport 擴(kuò)展機(jī)制

CommandCenter 可擴(kuò)展:用戶(hù)可以用不同的網(wǎng)絡(luò)協(xié)議或不同的庫(kù)來(lái)實(shí)現(xiàn) Transport API Server。

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

CommandHandler 可擴(kuò)展:用戶(hù)可以自行實(shí)現(xiàn) CommandHandler 并注冊(cè)到 SPI 配置文件中來(lái)為 CommandCenter 添加自定義的命令。

作者:云棲社區(qū) 中間件小哥

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SPI接口
    +關(guān)注

    關(guān)注

    0

    文章

    258

    瀏覽量

    34228
  • Sentinel
    +關(guān)注

    關(guān)注

    0

    文章

    8

    瀏覽量

    7130
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Facebook的擴(kuò)展性挑戰(zhàn)討論

    今天我們一起來(lái)了解Facebook背后的軟件,看看作為當(dāng)今世界上訪(fǎng)問(wèn)量最大的網(wǎng)站之一,F(xiàn)acebook是如何保證5億用戶(hù)的系統(tǒng)一直穩(wěn)定可靠的運(yùn)行。 Facebook的擴(kuò)展性挑戰(zhàn)
    發(fā)表于 07-17 07:22

    支持多內(nèi)核可擴(kuò)展性的網(wǎng)關(guān),不看肯定后悔

    支持多內(nèi)核可擴(kuò)展性的網(wǎng)關(guān),不看肯定后悔
    發(fā)表于 05-25 06:49

    請(qǐng)問(wèn)處理器擴(kuò)展性有什么重要之處?

    處理器擴(kuò)展性有什么重要之處?
    發(fā)表于 06-17 09:51

    多機(jī)飛行仿真系統(tǒng)擴(kuò)展性研究

    針對(duì)以往多機(jī)飛行仿真系統(tǒng)中存在擴(kuò)展性差的問(wèn)題,在利用新一代分布式仿真技術(shù)框架結(jié)構(gòu)開(kāi)發(fā)該系統(tǒng)的基礎(chǔ)上,采用時(shí)間同步和數(shù)據(jù)過(guò)濾的方式來(lái)提高系統(tǒng)的擴(kuò)展性。從基于HLA 協(xié)議開(kāi)
    發(fā)表于 05-12 17:06 ?22次下載
    多機(jī)飛行仿真系統(tǒng)<b class='flag-5'>擴(kuò)展性</b>研究

    OpenStack 企業(yè)私有云需大規(guī)模擴(kuò)展性支持

    擴(kuò)展性(Scalability)是云的基本要素之一,因此對(duì) OpenStack 云也不例外。 一方面,和已經(jīng)非常成熟的公有云和私有云方案相比,目前的 OpenStack 在擴(kuò)展性方面還有很多的不足
    發(fā)表于 10-11 10:25 ?0次下載
    OpenStack 企業(yè)私有云需大規(guī)模<b class='flag-5'>擴(kuò)展性</b>支持

    基于軟件定義網(wǎng)絡(luò)控制可擴(kuò)展性研究

    問(wèn)題,對(duì)SDN控制平面可擴(kuò)展性相關(guān)工作進(jìn)行綜述.首先分析控制平面可擴(kuò)展性的影響因素并給出改善思路:在此基礎(chǔ)上,從數(shù)據(jù)平面緩存優(yōu)化、高性能控制器、分布式控制平面和控制資源優(yōu)化分配4種技術(shù)路線(xiàn)出發(fā),論述了主要的解決方案和研究進(jìn)展,最
    發(fā)表于 12-19 18:07 ?0次下載
    基于軟件定義網(wǎng)絡(luò)控制可<b class='flag-5'>擴(kuò)展性</b>研究

    為什么區(qū)塊鏈擴(kuò)展性如此困難

    擴(kuò)展性的爭(zhēng)論遍及整個(gè)數(shù)字貨幣社區(qū)。隨著一些重大事件的發(fā)生,在短短幾天時(shí)間內(nèi),就會(huì)導(dǎo)致整個(gè)以太網(wǎng)絡(luò)的崩潰,比如CryptoKitties。正如大家所知道的,當(dāng)前狀態(tài)下最大的公共區(qū)塊鏈不能處理過(guò)多的事務(wù),因此需要擴(kuò)展。
    發(fā)表于 12-13 14:51 ?1188次閱讀

    如何使用BPL和DLL進(jìn)行程序的擴(kuò)展性資料說(shuō)明

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何使用BPL和DLL進(jìn)行程序的擴(kuò)展性資料說(shuō)明。
    發(fā)表于 05-17 18:05 ?0次下載
    如何使用BPL和DLL進(jìn)行程序的<b class='flag-5'>擴(kuò)展性</b>資料說(shuō)明

    區(qū)塊鏈可擴(kuò)展性的要點(diǎn)分別是什么

    大多數(shù)關(guān)于可擴(kuò)展性的討論都圍繞著各種平臺(tái)每秒可以處理的交易數(shù)量。
    發(fā)表于 10-31 09:31 ?2420次閱讀

    如何提高比特幣的可擴(kuò)展性

    多年來(lái),比特幣社區(qū)就如何提高比特幣的可擴(kuò)展性提出了各種各樣的建議,但總體上還沒(méi)有能夠達(dá)成全面共識(shí)。這就是為什么我們目前有幾個(gè)類(lèi)似比特幣的網(wǎng)絡(luò)從原始網(wǎng)絡(luò)分支出來(lái)。
    發(fā)表于 03-07 08:54 ?1276次閱讀

    區(qū)塊鏈可擴(kuò)展性有怎樣的要點(diǎn)

    很難說(shuō)誰(shuí)的可擴(kuò)展性方法最終會(huì)更可行。然而,如果每個(gè)參與者都認(rèn)識(shí)到存在的選擇比表面上的要多,那就更好了。
    發(fā)表于 03-07 14:40 ?763次閱讀

    影響軟件高可擴(kuò)展性的六大因素

    軟件可擴(kuò)展性是一個(gè)有趣的話(huà)題。實(shí)現(xiàn)軟件可擴(kuò)展性涉及很多因素,我們?cè)诒疚膶⒂懻撘恍┡c開(kāi)發(fā)和運(yùn)維方面相關(guān)的因素。
    的頭像 發(fā)表于 02-17 16:13 ?8604次閱讀
    影響軟件高可<b class='flag-5'>擴(kuò)展性</b>的六大因素

    什么是可擴(kuò)展性,為什么它很重要

    擴(kuò)展性是按需輕松擴(kuò)展或升級(jí)的能力。它是產(chǎn)品、系統(tǒng)、團(tuán)隊(duì)或公司提供滿(mǎn)足不斷增長(zhǎng)的需求的服務(wù)的能力。提供足夠的基礎(chǔ)設(shè)施來(lái)滿(mǎn)足更苛刻的IT要求,例如增加存儲(chǔ)和安全性,同時(shí)保持低成本,是數(shù)據(jù)中心運(yùn)營(yíng)商的日常斗爭(zhēng)。
    的頭像 發(fā)表于 04-21 10:36 ?4616次閱讀
    什么是可<b class='flag-5'>擴(kuò)展性</b>,為什么它很重要

    SD-WAN組網(wǎng)的可擴(kuò)展性怎么樣?

    SD-WAN組網(wǎng)具有很好的可擴(kuò)展性,能夠輕松滿(mǎn)足企業(yè)網(wǎng)絡(luò)不斷擴(kuò)張和增長(zhǎng)的需求,同時(shí)保持網(wǎng)絡(luò)的高效和可管理性,這使得SD-WAN組網(wǎng)能夠隨著企業(yè)的快速發(fā)展而快速調(diào)整規(guī)模,變更拓?fù)?,采取不同的接入方式?/div>
    的頭像 發(fā)表于 08-18 11:29 ?434次閱讀

    擴(kuò)展性對(duì)物聯(lián)網(wǎng)管理系統(tǒng)有哪些影響?

    擴(kuò)展性對(duì)于物聯(lián)網(wǎng)管理系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)非常重要,它直接影響著系統(tǒng)的性能、可靠性和能耗等方面,是評(píng)估一個(gè)系統(tǒng)優(yōu)劣的重要因素之一???b class='flag-5'>擴(kuò)展性對(duì)物聯(lián)網(wǎng)管理系統(tǒng)的影響主要體現(xiàn)在以下幾個(gè)方面:
    的頭像 發(fā)表于 10-11 15:15 ?383次閱讀