作者:京東物流 劉達(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),此處引入一下官方圖
??
上圖即Sentinel的默認(rèn)ProcessorSlotChain所配置的鏈路結(jié)構(gòu),默認(rèn)實(shí)現(xiàn)依托DefaultProcessorSlotChain。
??
從代碼上看是一個(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)證鏈條。如下圖所示,
??
在上圖中,會(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)
??
可以看到,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)控的采集。邏輯鏈路如下所示:
這張鏈路圖基本把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í)例,如下
??
通過(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)存
+關(guān)注
關(guān)注
8文章
2964瀏覽量
73803 -
開(kāi)源
+關(guān)注
關(guān)注
3文章
3214瀏覽量
42299 -
JDK
+關(guān)注
關(guān)注
0文章
81瀏覽量
16567 -
Sentinel
+關(guān)注
關(guān)注
0文章
10瀏覽量
7139
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論