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

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

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

開(kāi)源分析和落地方案—Sentinel篇

京東云 ? 來(lái)源:京東物流 劉達(dá) ? 作者:京東物流 劉達(dá) ? 2024-11-08 10:10 ? 次閱讀

作者:京東物流 劉達(dá)

一、Sentinel是什么?

Sentinel是從阿里技術(shù)體系內(nèi)誕生并由相關(guān)社區(qū)從微服務(wù)到云原生階段持續(xù)孵化的流量治理組件,在服務(wù)熔斷限流以及秒級(jí)/分鐘級(jí)監(jiān)控方面提供了開(kāi)箱即用的解決方案,此外作為支持云原生的重要探索,還提供了GO語(yǔ)言實(shí)現(xiàn)。Sentinel目前擁有著活躍的開(kāi)源社區(qū),從1.8.x版本開(kāi)始,通過(guò)深度參與到SpringCloudAlibaba套件的支持,實(shí)現(xiàn)與Java主流開(kāi)發(fā)框架SpringBoot及SpringCloud的兼容,進(jìn)而成為了Java技術(shù)棧開(kāi)源熔斷限流的事實(shí)標(biāo)準(zhǔn)。雖然其2.x版本持續(xù)難產(chǎn)(可能是適配OpenSergo規(guī)范的影響),不過(guò)好在1.8.x并沒(méi)停止迭代,今年以來(lái)已經(jīng)在1.8.7(JDK8)的基礎(chǔ)之上做了1.8.8(JDK17)的升級(jí),完成了主流JDK版本的支持,基本能夠滿足Javaer的開(kāi)發(fā)需求。

考慮到一般部署環(huán)境以JDK8居多,而且1.8.8除了JDK的升級(jí)外,沒(méi)有做實(shí)質(zhì)的功能改造,所以本篇文章主要基于1.8.7版本展開(kāi),即在JDK8的環(huán)境下對(duì)Sentinel的能力進(jìn)行討論。

二、Sentinel能帶來(lái)什么?

就如前文所介紹的,Sentinel提供了完善的熔斷、限流以及秒級(jí)/分鐘級(jí)監(jiān)控方案。最核心的一點(diǎn),就是它把應(yīng)用規(guī)則的目標(biāo)統(tǒng)一抽象成了一個(gè)概念——資源。按照官方說(shuō)明,資源可以是Java應(yīng)用程序中的任何內(nèi)容,比如服務(wù)、接口方法或者一段代碼。只要用Sentinel提供的資源創(chuàng)建及釋放API包裹起來(lái),就可以稱之為一個(gè)資源。資源的抽象為Sentinel的使用提供了極大的靈活性,這讓開(kāi)發(fā)者可以把代碼鏈路中的任何一個(gè)部分都做到流量治理規(guī)則中,當(dāng)然為了提高代碼的可讀性以及規(guī)范性,我們還是推薦以服務(wù)入口(HttpRPC)、接口或者接口的實(shí)現(xiàn)方法作為最小資源單元。

同時(shí),Sentinel提供了豐富的控制規(guī)則:

?流量控制(FlowRule)

區(qū)分來(lái)源、限流類型(QPS/線程數(shù))、支持上下游鏈路、多種流控效果(拒絕、排隊(duì)、慢啟動(dòng))

?熱點(diǎn)參數(shù)限流(ParamFlowRule)

熱點(diǎn)限流是對(duì)流量控制的補(bǔ)充,對(duì)Top-K的熱點(diǎn)參數(shù)進(jìn)行限流處理

?系統(tǒng)負(fù)載限流(SystemRule)

可以理解為應(yīng)用級(jí)的流量控制策略,包含負(fù)載、單機(jī)平均RT,單機(jī)QPS等。不過(guò),因?yàn)榱6容^粗且部分指標(biāo)的獲取在容器環(huán)境下存在適配問(wèn)題,所以社區(qū)中大部分人對(duì)這個(gè)的理解是還有待完善,成熟的案例比較少。

?熔斷降級(jí)(DegradeRule)

在熔斷降級(jí)方面,則是直接對(duì)標(biāo)的Hystrix框架,一是在實(shí)現(xiàn)機(jī)制上做了優(yōu)化,相對(duì)Hystrix基于線程池的隔離控制策略,通過(guò)并發(fā)控制機(jī)制減少了線程池的創(chuàng)建和占用。另外,在配置上也更加簡(jiǎn)化,相信有過(guò)Hystrix使用經(jīng)驗(yàn),都會(huì)對(duì)其繁雜的注解配置項(xiàng)感到困惑,而當(dāng)引入Sentinel時(shí)則無(wú)需擔(dān)心這些。

如果僅僅是這些,Sentinel的定位也僅限于一個(gè)組件包,類似Hystrix一樣。那為何本文開(kāi)篇說(shuō)Sentinel是一套解決方案呢?因?yàn)樗€做到了另外的三點(diǎn),接下來(lái)繼續(xù)進(jìn)行說(shuō)明:

第一點(diǎn):包容性

Sentinel通過(guò)對(duì)Adapter模塊組持續(xù)迭代,目前已經(jīng)兼容了主流的一系列調(diào)用協(xié)議及組件,比如dubbo2,dubbo3,httpclient,okhttp,grpc,sofa,quarkus,webflux,webmvc等。此外還完成了對(duì)Java開(kāi)源網(wǎng)關(guān)的支持,包括zuul1,zuul2,springcloud-gateway。并且作為java應(yīng)用流量控制的標(biāo)準(zhǔn)框架,很多其他開(kāi)源框架也在項(xiàng)目?jī)?nèi)部做了相關(guān)的兼容。

第二點(diǎn):界面化

Sentinel提供了方便易用的Dashboard,支持常用的一系列操作。比如應(yīng)用的注冊(cè)發(fā)現(xiàn),規(guī)則參數(shù)的配置、查看,接口簇點(diǎn)鏈路的自發(fā)現(xiàn)和樹(shù)狀展示,秒級(jí)的監(jiān)控視圖等等,雖然開(kāi)源方案展示的數(shù)據(jù)以內(nèi)存或者對(duì)應(yīng)用節(jié)點(diǎn)信息的拉取為依托,但這已經(jīng)提供了非常強(qiáng)的指導(dǎo)性。其對(duì)應(yīng)的商業(yè)化版本AHAS已經(jīng)在阿里云中得到廣泛應(yīng)用。

第三點(diǎn):擴(kuò)展性

雖然core包提供的是基于應(yīng)用內(nèi)存的數(shù)據(jù)存取策略,但是sentinel同時(shí)對(duì)控制規(guī)則數(shù)據(jù)的拉取鏈路做了通用的抽象,并衍生出了一系列datasource包。包含apollo、consul、etcd、nacos、redis、zk等,他們具備的共同點(diǎn)就是客戶端能夠及時(shí)的獲取到配置數(shù)據(jù)變更事件,而Sentinel依賴的控制規(guī)則就是以配置數(shù)據(jù)的形式維護(hù)在這些中間件中,并實(shí)現(xiàn)對(duì)客戶端的分發(fā)。

前文介紹了這么多,那引入Sentinel能帶來(lái)什么改變呢?

我覺(jué)得,首先,限流策略更加豐富,能夠更好的應(yīng)對(duì)日趨復(fù)雜的限流需求;其次,對(duì)于資源的流量管理實(shí)現(xiàn)了統(tǒng)一,從單一入口維護(hù)應(yīng)用的所有流量控制規(guī)則,無(wú)需從網(wǎng)關(guān)、JSF等分別對(duì)應(yīng)用的入口進(jìn)行配置;限流的維度更加細(xì)化,從入口級(jí)下沉到了應(yīng)用內(nèi)資源;在熔斷的支持上,除了JSF客戶端調(diào)用外,應(yīng)用內(nèi)部或作為客戶端對(duì)外部的任何協(xié)議調(diào)用都可以增加熔斷的管理,服務(wù)的穩(wěn)定性也會(huì)隨之提升。

三、Sentinel的重點(diǎn)實(shí)現(xiàn)

概念之后再來(lái)說(shuō)說(shuō)Sentinel中的關(guān)鍵實(shí)現(xiàn)。這一部分準(zhǔn)備分三塊來(lái)說(shuō)明。第一是它的核心規(guī)則控制鏈路,第二它的datasource實(shí)現(xiàn)結(jié)構(gòu),第三Dashboard與應(yīng)用的交互邏輯。此處主要是專注在架構(gòu)實(shí)現(xiàn)上,像業(yè)內(nèi)熟知的一些控制算法比如令牌桶等,不再贅述。

1、核心規(guī)則控制鏈路

為了更好的理解這條鏈路的結(jié)構(gòu),此處引入一下官方圖

wKgZomctcvGAJgnIAANxGK8Ho6s851.png

??

上圖即Sentinel的默認(rèn)ProcessorSlotChain所配置的鏈路結(jié)構(gòu),默認(rèn)實(shí)現(xiàn)依托DefaultProcessorSlotChain。

wKgaomctcvOAIqqfAAFqO8xZ0dU513.png

??

從代碼上看是一個(gè)標(biāo)準(zhǔn)的鏈表結(jié)構(gòu),鏈表中裝配的節(jié)點(diǎn)對(duì)象類型為AbstractLinkedProcessorSlot,也就是圖中這些Slot的父類,我們或可以稱之為Slot模版類。通過(guò)代碼的查看,會(huì)發(fā)現(xiàn)它聲明了兩個(gè)方法,entry、exit分別作為Slot的入口和出口,并且在方法入?yún)⒅袛y帶了當(dāng)前調(diào)用鏈路的上下文信息。通過(guò)官方圖例能夠看出,請(qǐng)求在進(jìn)入處理鏈條后,按先后順序會(huì)經(jīng)過(guò)三類Slot,前置的NodeSelectorSlot、ClusterBuilderSlot用于調(diào)用鏈路的提取,中間StatisticSlot是通用的滑動(dòng)窗口計(jì)數(shù)功能,比如RT、通過(guò)數(shù)、拒絕數(shù)、異常數(shù)等,后置的ParamFlowSlot、SystemSlot等則為真正的規(guī)則驗(yàn)證鏈條。如下圖所示,

wKgZomctcvSAa0amAAERRjGnlXg894.jpg

??

在上圖中,會(huì)發(fā)現(xiàn)在模版類中有額外的兩個(gè)方法,fireEntry和fireExit,這兩個(gè)方法在AbstractLinkedProcessSlot中均有默認(rèn)的實(shí)現(xiàn),主要是用于在當(dāng)前節(jié)點(diǎn)entry或exit方法執(zhí)行過(guò)程中觸發(fā)對(duì)next節(jié)點(diǎn)的調(diào)度,這就使得Slot鏈表觸發(fā)順序和完成順序并不一定相同。這樣的好處是在基礎(chǔ)鏈路上提供了充足的靈活性,上游Slot可以按需觸發(fā)下游Slot并獲取執(zhí)行結(jié)果。例如此處用于統(tǒng)計(jì)計(jì)數(shù)的StatisticSlot和用于規(guī)則驗(yàn)證的一系列Slot列表之前的關(guān)系,正常通過(guò)和規(guī)則攔截的調(diào)用都能被StatisticSlot抓取到進(jìn)行統(tǒng)計(jì)。

2、Datasource實(shí)現(xiàn)

作為配置文件的讀取來(lái)源,Sentinel提供了標(biāo)準(zhǔn)實(shí)現(xiàn)框架,并以此為基礎(chǔ),對(duì)主流的開(kāi)源分布式配置中心也做了充分的適配,還是以類結(jié)構(gòu)圖作為切入點(diǎn)

wKgaomctcvSAH4H3AAFOhPzf5eE411.jpg

??

可以看到,Sentinel提供的Datasource規(guī)范中,通過(guò)loadConfig,readSource,getProperty,close四個(gè)方法,覆蓋了數(shù)據(jù)源的讀取、加載、查詢和釋放整個(gè)流程。落地到具體實(shí)現(xiàn)方案,它提供了兩個(gè)大的方向,前者是支持熱更新,后者是不可變的配置來(lái)源,如jar包中的文件。

熱更新模式下,基于數(shù)據(jù)源的特性,又細(xì)分了兩種,我把它總結(jié)為輪詢模式和訂閱模式。像Eureka、本地文件這種,不支持?jǐn)?shù)據(jù)變更事件的訂閱,Sentinel提供的方案是按照一定的時(shí)間間隔,定期的去拉取最新數(shù)據(jù)比對(duì)是否需要更新,這種就是前面講的輪詢模式。還有一種,依托于越來(lái)越成熟的各種開(kāi)源分布式配置中間件,應(yīng)用通過(guò)SDK集成,能夠方便的訂閱指定的配置項(xiàng),并實(shí)時(shí)接收數(shù)據(jù)變更事件進(jìn)行處理邏輯,相對(duì)于輪詢模式配置生效的更加及時(shí),是目前線上案例中最常用的模式。

對(duì)于不可變模式,Sentinel也僅提供了一種實(shí)現(xiàn),僅限于無(wú)配置變更需求的場(chǎng)景,支持一次性加載,好處是輕量依賴項(xiàng)少,但更新需要重啟。

3、Dashboard與應(yīng)用的交互

核心鏈路和數(shù)據(jù)來(lái)源之后,再來(lái)說(shuō)說(shuō)Sentinel關(guān)于控制面的實(shí)現(xiàn)。

首先,要說(shuō)明的是,即便是到最新的版本,Sentinel Dashboard也不是必須的。尤其是在1.6.x以前,datasource和dashboard這些模塊都還未完善,項(xiàng)目引用Sentinel的方式主要是以硬編碼為主,控制規(guī)則是借助RuleManager的靜態(tài)方法進(jìn)行初始化,調(diào)用鏈路中通過(guò)SphU或SphO實(shí)現(xiàn)資源的創(chuàng)建,使用Tracer去顯式的記錄異常(@SentinelResource是在1.8.x才趨于完善)?,F(xiàn)在,官方文檔在大部分基礎(chǔ)用例中也是以這些形式為主。那Dashboard的作用是什么?

Dashboard為我們提供了相對(duì)完整的控制面,基本涵蓋了Sentinel的所有功能,包含各種規(guī)則的查看和配置、節(jié)點(diǎn)的自動(dòng)注冊(cè)發(fā)現(xiàn)以及健康狀態(tài)監(jiān)控、簇點(diǎn)鏈路的采集等,在可觀測(cè)方面提供了秒級(jí)的監(jiān)控視圖,而在后臺(tái)為這些功能的數(shù)據(jù)提供了基于內(nèi)存的實(shí)現(xiàn),為我們實(shí)現(xiàn)硬編碼到控制臺(tái)的轉(zhuǎn)變提供了明確的方向。接下來(lái)從三個(gè)角度說(shuō)明Dashboard的重點(diǎn)實(shí)現(xiàn),分別是節(jié)點(diǎn)信息的發(fā)現(xiàn)、規(guī)則數(shù)據(jù)的維護(hù)、秒級(jí)監(jiān)控的采集。邏輯鏈路如下所示:

wKgZomctcvWAYjPdAADwZVfQZUE005.jpg

這張鏈路圖基本把Sentinel從客戶端到Dashboard服務(wù)端的交互過(guò)程做了明確的展示。

A. 首先,Sentinel控制臺(tái)對(duì)客戶端的發(fā)現(xiàn)機(jī)制并不依賴于其他中間件,是獨(dú)立的相對(duì)輕量的實(shí)現(xiàn)。邏輯上很簡(jiǎn)單,即在控制臺(tái)暴露了一個(gè)MachineRegistryController,客戶端配置Dashboard地址后,定時(shí)的上報(bào)心跳數(shù)據(jù)。

B. Sentinel對(duì)應(yīng)用的Metrics數(shù)據(jù)采集是以定時(shí)拉取的方式,應(yīng)用SDK會(huì)暴露http入口,用于提供給Dashboard服務(wù)側(cè)進(jìn)行調(diào)用。Dashboard中相關(guān)的規(guī)則配置也是以類似的方式進(jìn)行,額外增加了數(shù)據(jù)的寫入動(dòng)作用于更新規(guī)則。

C. sentinel-core本身對(duì)Dashboard側(cè)的交互沒(méi)有依賴,而是通過(guò)transport包中以集成Spiloader的方式追加相關(guān)的初始化動(dòng)作,實(shí)現(xiàn)像注冊(cè)心跳、遠(yuǎn)端控制等附加能力,即sentinel-core仍然是獨(dú)立可用的。

SlotChain、Dashboard和Datasource是一套組合拳,共同構(gòu)成了Sentinel的流控解決方案。SlotChain完成了核心的規(guī)則控制邏輯,而Datasource則是解決了配置數(shù)據(jù)怎么更新怎么同步的問(wèn)題,最后Dashboard則是將配置數(shù)據(jù)的界面化維護(hù)以及運(yùn)行時(shí)數(shù)據(jù)的展示入口提供給了開(kāi)發(fā)者,讓線上的落地成為了可能。

?

四、Sentinel源碼包結(jié)構(gòu)

從工程結(jié)構(gòu)上看,Sentinel以sentinel-core為基礎(chǔ),衍生了一系列的模塊:

1、sentinel-dashboard:sentinel控制臺(tái),提供簡(jiǎn)易的登錄方式,功能上支持節(jié)點(diǎn)注冊(cè)展示,限流、熔斷等流控規(guī)則的查看與下發(fā),節(jié)點(diǎn)Metric信息的采集和聚合展示等。

2、sentinel-transport:內(nèi)部通信模塊,實(shí)現(xiàn)客戶端節(jié)點(diǎn)的心跳注冊(cè)以及消息接收功能。

3、sentinel-logging:sentinel為了和應(yīng)用日志做隔離,單獨(dú)指定的日志輸出問(wèn)題,這個(gè)模塊提供了基于slf4j的默認(rèn)實(shí)現(xiàn),同時(shí)可以作為參考實(shí)現(xiàn),以SPI的方式定制其他日志輸出通道。

4、sentinel-adapter:協(xié)議適配模塊,基本兼容了所有開(kāi)源的協(xié)議,一是在資源生成時(shí)指定prefix,另外就是依賴調(diào)用鏈路中的FiIter做協(xié)議解析,以支持抽取流控規(guī)則依賴的參數(shù),比如origin等。

5、sentinel-extension:這個(gè)模塊組則是作為一版擴(kuò)展實(shí)現(xiàn),不過(guò)大部分主要是依賴各種分布式配置型中間件實(shí)現(xiàn)的datasource模塊,實(shí)現(xiàn)規(guī)則數(shù)據(jù)的存取。

6、sentinel-cluster:主要是提供集群限流的部分簡(jiǎn)易實(shí)現(xiàn),目前看這種基于token分發(fā)中心的集群限流方案在性能上損耗相對(duì)單機(jī)型還是要大一些。

?

五、Sentinel的落地問(wèn)題及改造方案

在上文中,對(duì)Sentinel的邏輯架構(gòu)以及源碼已經(jīng)做了詳細(xì)介紹。如果在我們生產(chǎn)環(huán)境中落地,有哪些問(wèn)題?

我們知道,Sentinel提供的默認(rèn)實(shí)現(xiàn),數(shù)據(jù)的讀取以內(nèi)存為主要媒介。Dashboard基于節(jié)點(diǎn)上報(bào)的心跳信息做匯總,收集到AppManagement中,用于左側(cè)菜單欄的應(yīng)用展示,并開(kāi)始根據(jù)心跳上傳時(shí)間判斷各應(yīng)用內(nèi)節(jié)點(diǎn)的在線離線狀態(tài),當(dāng)單個(gè)應(yīng)用內(nèi)所有節(jié)點(diǎn)都離線就對(duì)該應(yīng)用進(jìn)行隱藏。規(guī)則數(shù)據(jù)的讀取以及Metric統(tǒng)計(jì)信息是通過(guò)遠(yuǎn)程調(diào)用節(jié)點(diǎn)的通信入口進(jìn)行。由此可以衍生出下面四個(gè)場(chǎng)景的落地方案:

1、規(guī)則數(shù)據(jù)的讀寫

在第三部分中也介紹到,Sentinel對(duì)于規(guī)則數(shù)據(jù)的同步機(jī)制,提供了一組datasource模塊,主要以各分布式配置中間件為中心,實(shí)現(xiàn)數(shù)據(jù)的寫入和變更監(jiān)聽(tīng),達(dá)到動(dòng)態(tài)變更規(guī)則數(shù)據(jù)的目的。如果開(kāi)發(fā)者并不想引入這些額外的中間件,那么就需要根據(jù)自己的需求來(lái)擴(kuò)展datasource模塊。

接入新的配置源,首先從Dashboard開(kāi)始,我們可以參考FlowControllerV2中提供的Nacos配置樣例,對(duì)應(yīng)于各個(gè)規(guī)則,實(shí)現(xiàn)基于appName的DynamicRuleProvider和DynamicRulePublisher的讀寫入口類,將規(guī)則數(shù)據(jù)以Json的形式寫入新的配置源中,當(dāng)然為了更大的擴(kuò)展性和業(yè)務(wù)隔離性,我們可以在appName的參數(shù)基礎(chǔ)上,再追加類似Datacenter這種參數(shù),以區(qū)分不同的業(yè)務(wù)群,避免單個(gè)Dashboard中應(yīng)用過(guò)量造成處理壓力。

另外,就要考慮sentinel-datasource-{CustomizedDatasource}的開(kāi)發(fā),基于sentinel-datasource-extension這個(gè)數(shù)據(jù)源監(jiān)聽(tīng)模版,參考sentinel-datasource-nacos中NacosDataSource實(shí)現(xiàn)對(duì)應(yīng)的AbstractDataSource,到此為止只是實(shí)現(xiàn)了Datasource類的定義和實(shí)現(xiàn)。而真正打通Dashboard到節(jié)點(diǎn)側(cè)的數(shù)據(jù)鏈路,還需要對(duì)Datasource的調(diào)用和初始化流程。Sentinel包中的demo工程,有針對(duì)于各個(gè)datasource的初始化樣例。

而我們?nèi)绻胝嬲涞氐巾?xiàng)目中,僅僅這些還是不夠的,而是需要把Datasource對(duì)各個(gè)規(guī)則的加載和監(jiān)聽(tīng)封裝成獨(dú)立的Starter,這樣才能最大限度降低springboot集成的復(fù)雜度。對(duì)于這個(gè)想法,我們則需要轉(zhuǎn)向另一個(gè)開(kāi)源項(xiàng)目:spring-cloud-alibaba-sentinel-datasource和spring-cloud-starter-alibaba-sentinel。

前者將不同Datasource和對(duì)應(yīng)的配置節(jié)點(diǎn)做了關(guān)聯(lián),如下

①DatasourceFactoryBean的聲明

public class NacosDataSourceFactoryBean implements FactoryBean

②Properties初始化參數(shù)中攜帶對(duì)應(yīng)的FactoryBean

public NacosDataSourceProperties() {    super(NacosDataSourceFactoryBean.class.getName());}

后者,則是在初始化SentinelDataSourceHandler的過(guò)程中,根據(jù)SentinelProperties中各Datasource子節(jié)點(diǎn)配置與否決定是否初始化到Bean實(shí)例,如下

wKgaomctcviAdDd3AAOgNOH3PME322.png

??

通過(guò)這幾部分的構(gòu)建,我們就可以實(shí)現(xiàn)自己的Sentinel-Starter,實(shí)現(xiàn)基于自定義數(shù)據(jù)源做規(guī)則數(shù)據(jù)的運(yùn)維。

?

2、Metric統(tǒng)計(jì)數(shù)據(jù)及日志的托管

目前Metric信息是采用從Dashboard定時(shí)拉取再?gòu)膽?yīng)用維度聚合的方式進(jìn)行。節(jié)點(diǎn)中的Metrics信息是相對(duì)完整的,我們可以從兩方面來(lái)進(jìn)行收集:

第一種方式,節(jié)點(diǎn)主動(dòng)上報(bào),收集至統(tǒng)一的存儲(chǔ),再以Grafana的形式做數(shù)據(jù)展示。具體方式的話,可以選用直接上傳到定制的OAP服務(wù),也可以擴(kuò)展sentinel-log模塊的實(shí)現(xiàn)做基于日志的上傳(因?yàn)閟entinel的設(shè)計(jì)機(jī)制中,自身的狀態(tài)日志和業(yè)務(wù)日志是分離的)。不過(guò),這會(huì)造成一定的性能損耗,落地到項(xiàng)目中需要進(jìn)行詳細(xì)的壓測(cè)和評(píng)估。

第二種方式,由中控進(jìn)行定時(shí)采樣,時(shí)間間隔可以自定義,也就是以拉的方式進(jìn)行,采樣率可以在中控進(jìn)行統(tǒng)一的動(dòng)態(tài)控制,合理配置能夠更容易達(dá)到性能損耗和觀測(cè)性的平衡。

此處不再細(xì)說(shuō),方案比較多,見(jiàn)仁見(jiàn)智。

?

3、Dashboard的適配

Dashboard面向線上業(yè)務(wù)場(chǎng)景,需要解決的有以下三點(diǎn):

①數(shù)據(jù)存儲(chǔ)問(wèn)題:上文中規(guī)則數(shù)據(jù)的Datasource擴(kuò)展不再討論,除此以外,Sentinel中節(jié)點(diǎn)、應(yīng)用、簇點(diǎn)鏈路都是基于內(nèi)存存儲(chǔ)的,這就有一個(gè)問(wèn)題——重啟丟失。因?yàn)檫@些信息都是基于節(jié)點(diǎn)心跳的,數(shù)據(jù)丟失后意味著重新收集,那么之前在這些數(shù)據(jù)上做的規(guī)則配置就會(huì)丟失查看的入口。另外,應(yīng)用的展示是以應(yīng)用內(nèi)節(jié)點(diǎn)的在線狀態(tài)為準(zhǔn)的,當(dāng)應(yīng)用內(nèi)所有節(jié)點(diǎn)都離線,也會(huì)造成應(yīng)用列表中缺失。所以解決方案就是需要將應(yīng)用、節(jié)點(diǎn)保存至持久化存儲(chǔ)中,例如Mysql,而簇點(diǎn)鏈路信息由于樹(shù)狀結(jié)構(gòu)的特殊性,可以直接放到Redis中存儲(chǔ)以及更新。

②權(quán)限問(wèn)題:Dashboard通過(guò)輕量的自定義Filter實(shí)現(xiàn)的最簡(jiǎn)單的登錄控制。落地的話就需要首先接入ERP統(tǒng)一登錄,另外還需要做應(yīng)用權(quán)限的管理,避免權(quán)限穿透和誤操作問(wèn)題。

③業(yè)務(wù)劃分:需要按照業(yè)務(wù)進(jìn)行應(yīng)用層面的劃分。實(shí)現(xiàn)多數(shù)據(jù)中心的支持,避免中心節(jié)點(diǎn)集成應(yīng)用過(guò)多。

?

4、協(xié)議的適配

相比前幾點(diǎn),此處的改動(dòng)是最輕量的。當(dāng)開(kāi)發(fā)使用的調(diào)用協(xié)議不在Sentinel官方兼容,那么就需要對(duì)協(xié)議做適配性開(kāi)發(fā)。按照sentinel-adapter中對(duì)其他協(xié)議的適配方式,我們需要改造的大體可以總結(jié)為兩點(diǎn),第一,常規(guī)調(diào)用上下文參數(shù)的解析,比如調(diào)用來(lái)源等;第二,定義協(xié)議入口的資源前綴,與其他資源做區(qū)分。

六、小結(jié)

本文圍繞Sentinel展開(kāi),從其基本概念到核心實(shí)現(xiàn),再到探討開(kāi)源方案的挑戰(zhàn)和如何在實(shí)際項(xiàng)目中應(yīng)用和改進(jìn)Sentinel。Sentinel以其高度的靈活性和可擴(kuò)展性贏得了廣大開(kāi)發(fā)者的青睞,不論是新系統(tǒng)的開(kāi)發(fā)還是現(xiàn)有系統(tǒng)的維護(hù),Sentinel都能為我們提供極具價(jià)值的支持。

?

參考內(nèi)容:

【1】https://sentinelguard.io/zh-cn/?

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 內(nèi)存
    +關(guān)注

    關(guān)注

    8

    文章

    2964

    瀏覽量

    73803
  • 開(kāi)源
    +關(guān)注

    關(guān)注

    3

    文章

    3214

    瀏覽量

    42299
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    81

    瀏覽量

    16567
  • Sentinel
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    7139
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

    Sentinel 提供多樣的 SPI 接口用于提供擴(kuò)展的能力。用戶可以在用同一個(gè) sentinel-core 的基礎(chǔ)上自行擴(kuò)展接口實(shí)現(xiàn),從而可以方便地給 Sentinel 添加自定義的邏輯。 初始化
    的頭像 發(fā)表于 10-26 10:03 ?4105次閱讀

    基于Sentinel自研組件的系統(tǒng)限流、降級(jí)、負(fù)載保護(hù)最佳實(shí)踐探索

    一、Sentinel簡(jiǎn)介 Sentinel 以流量為切入點(diǎn),從 流量控制 、 熔斷降級(jí) 、 系統(tǒng)負(fù)載 保護(hù)等多個(gè)維度保護(hù)服務(wù)的穩(wěn)定性。 Sentinel 具有以下特征: ? 豐富的應(yīng)用場(chǎng)
    的頭像 發(fā)表于 09-25 11:19 ?1205次閱讀
    基于<b class='flag-5'>Sentinel</b>自研組件的系統(tǒng)限流、降級(jí)、負(fù)載保護(hù)最佳實(shí)踐探索

    晶豐明源落地方案MCU+MOS方案應(yīng)用

    晶豐明源落地方案應(yīng)用
    發(fā)表于 04-10 19:02

    華秋 BLDC 專區(qū)上線!為您匯集基于各品牌 MCU 落地應(yīng)用的相關(guān) BLDC 方案

    、風(fēng)扇吊扇、卷發(fā)棒、高速風(fēng)筒等可量產(chǎn)的全套解決方案,華秋商城現(xiàn)已開(kāi)辟 BLDC 專區(qū),電機(jī)控制解決方案商正火熱招募中,歡迎登錄華秋商城查看!這里先為大家整合了部分基于各 MCU 落地應(yīng)用的相關(guān) BLDC
    發(fā)表于 06-20 15:28

    開(kāi)源圖形驅(qū)動(dòng)在OpenHarmony上的使用和落地

    本文轉(zhuǎn)載自 OpenHarmony TSC 官方《峰會(huì)回顧第10期 | 開(kāi)源圖形驅(qū)動(dòng)在OpenHarmony上的使用和落地》 演講嘉賓 | 黃然 回顧整理 | 廖濤 排版校對(duì) | 李萍萍 嘉賓簡(jiǎn)介
    發(fā)表于 08-31 18:07

    LEM發(fā)布綜合電池監(jiān)測(cè)器件Sentinel III

    LEM發(fā)布綜合電池監(jiān)測(cè)器件Sentinel III 萊姆(LEM)近日發(fā)布了一款先進(jìn)的綜合電池監(jiān)測(cè)方案Sentinel III,該款解決方案解決了不間斷電源(UPS)原始設(shè)備制造商(
    發(fā)表于 11-25 09:15 ?642次閱讀

    萊姆電子推出新一代Sentinel產(chǎn)品Sentinel 3+

    LEM萊姆電子宣布推出經(jīng)過(guò)驗(yàn)證的新一代Sentinel 產(chǎn)品Sentinel 3+,可對(duì)不間斷電源(UPS) 系統(tǒng)中的后備電池健康狀態(tài)進(jìn)行連續(xù)監(jiān)測(cè)
    發(fā)表于 04-08 10:10 ?1315次閱讀

    阿里巴巴宣布 Sentinel 開(kāi)源,進(jìn)一步完善 Dubbo 生態(tài)

    對(duì)外開(kāi)源的,目的是幫助開(kāi)發(fā)者獲得更完整的分布式服務(wù)解決方案。例如當(dāng)我們限流的流量發(fā)生變化的時(shí)候,我們需要迅速推規(guī)則的時(shí)候,Sentinel可以和Nacos相互整合,起到快速操作、快速配送的效果
    發(fā)表于 08-14 17:32 ?202次閱讀

    Sentinel 如何通過(guò)勻速請(qǐng)求和冷啟動(dòng)來(lái)保障服務(wù)的穩(wěn)定性

    摘要:?這是圍繞 Sentinel 的使用場(chǎng)景、技術(shù)對(duì)比和實(shí)現(xiàn)、開(kāi)發(fā)者實(shí)踐等維度推出的系列文章的第二。 第一:Dubbo 的流量防衛(wèi)兵 | Sentinel如何通過(guò)限流實(shí)現(xiàn)服務(wù)的高
    發(fā)表于 08-28 14:09 ?308次閱讀

    [開(kāi)源] DSLogic開(kāi)源邏輯分析方案分享

    今天來(lái)分享一個(gè)開(kāi)源的項(xiàng)目——DSLogic,它是一款基于FPGA的邏輯分析儀,是由國(guó)內(nèi)的夢(mèng)源實(shí)驗(yàn)室(DreamSourceLab)做出的開(kāi)源軟硬件產(chǎn)品,從...
    發(fā)表于 01-26 18:17 ?35次下載
    [<b class='flag-5'>開(kāi)源</b>] DSLogic<b class='flag-5'>開(kāi)源</b>邏輯<b class='flag-5'>分析</b>儀<b class='flag-5'>方案</b>分享

    Sentinel高可用流量管理框架

    Sentinel.zip
    發(fā)表于 04-25 09:24 ?0次下載
    <b class='flag-5'>Sentinel</b>高可用流量管理框架

    開(kāi)源鴻蒙OpenHarmony在電力行業(yè)首次落地

    開(kāi)源鴻蒙OpenHarmony在電力行業(yè)首次落地 開(kāi)放原子開(kāi)源基金會(huì)擬于2023年6月舉辦“2023開(kāi)放原子全球開(kāi)源峰會(huì)(OAGS)”。6 月 12 日,以“OpenHarmony 共
    的頭像 發(fā)表于 06-09 19:30 ?1936次閱讀

    AI Codec在應(yīng)用落地方面的案例

    ),展現(xiàn)了強(qiáng)大的技術(shù)潛力。但受限于計(jì)算復(fù)雜度、非標(biāo)等原因,AI Codec在應(yīng)用落地方面的案例卻屈指可數(shù)。LiveVideoStackCon2022北京站邀請(qǐng)了來(lái)自雙深科技的田康為大家分享基于雙深
    的頭像 發(fā)表于 06-19 09:50 ?819次閱讀
    AI Codec在應(yīng)用<b class='flag-5'>落地方</b>面的案例

    EMC案例分析:不同接地方案對(duì)EFT/B測(cè)試的影響

    前面我們介紹過(guò)《EMC的三大法寶之一:接地》和《EMC的三大法寶之一:接地(二)》,本次我們就不同接地方案對(duì)EFT/B測(cè)試的影響進(jìn)行舉例分析
    的頭像 發(fā)表于 09-07 09:59 ?1138次閱讀
    EMC案例<b class='flag-5'>分析</b>:不同接<b class='flag-5'>地方案</b>對(duì)EFT/B測(cè)試的影響

    基于Sentinel實(shí)現(xiàn)歷史監(jiān)控?cái)?shù)據(jù)回看

    眾所周知,Sentinel 對(duì)監(jiān)控?cái)?shù)據(jù)的做法是定時(shí)落盤在客戶端,然后 Sentinel 提供接口去拉取日志文件。
    的頭像 發(fā)表于 11-27 14:34 ?796次閱讀
    基于<b class='flag-5'>Sentinel</b>實(shí)現(xiàn)歷史監(jiān)控?cái)?shù)據(jù)回看