Sermant:無代理服務(wù)網(wǎng)格架構(gòu)解析及無門檻玩轉(zhuǎn)插件開發(fā)(網(wǎng)絡(luò)無代理什么意思)
本文分享自華為云社區(qū)《DTT NO.50丨Sermant:無代理服務(wù)網(wǎng)格架構(gòu)解析及無門檻玩轉(zhuǎn)插件開發(fā)-云社區(qū)-華為云》,作者: 華為云社區(qū)精選 。
本期直播的主題是《從架構(gòu)設(shè)計(jì)到開發(fā)實(shí)戰(zhàn),深入淺出了解Sermant_DTT_直播_云社區(qū)_華為云》,華為云云原生DTSE技術(shù)布道師、華為云高級(jí)工程師、Sermant開源社區(qū)PMC核心成員欒文飛,為廣大開發(fā)者詳細(xì)從架構(gòu)設(shè)計(jì)角度介紹了Sermant的類加載器架構(gòu)和插件化機(jī)制,并在實(shí)戰(zhàn)中從基礎(chǔ)能力開發(fā),到進(jìn)階使用統(tǒng)一動(dòng)態(tài)配置能力、統(tǒng)一日志能力一步步完成插件開發(fā)。
Sermant核心機(jī)制——插件化
Sermant分為兩層,Sermant框架層和Sermant服務(wù)治理層,Sermant框架提供了一系列的API用于插件開發(fā)者可以快速進(jìn)行服務(wù)治理插件的開發(fā)。
服務(wù)治理層是由多種不同的服務(wù)治理能力組成,包含流量控制、標(biāo)簽路由等都是被包裝在不同的插件中。其中還包括Backend可用于一些狀態(tài)展示和事件監(jiān)控管理。
Sermant的插件化機(jī)制中得益于Java 的SPI機(jī)制,在很多高可擴(kuò)展的的項(xiàng)目中,都會(huì)利用SPI去加載自己的擴(kuò)展,Sermant在框架中定義插件聲明接口,用于加載不同的服務(wù)治理插件,插件開發(fā)者只需要按照接口契約,即可輕松將插件接入Sermant。
Sermant核心機(jī)制——類隔離
Sermant將框架、插件、微服務(wù)之間進(jìn)行了全面的類隔離,避免框架和插件之間、插件與插件之間以及Sermant與微服務(wù)之間出現(xiàn)類沖突問題,并且從開發(fā)者的視角來看,服務(wù)治理能力開發(fā)中對(duì)類隔離能力無感知,且無需擔(dān)心類沖突問題。
除此之外,在Sermant的類加載結(jié)構(gòu)中還有一個(gè)很重要的機(jī)制,在服務(wù)治理插件的開發(fā)過程往往會(huì)利用到宿主服務(wù)的一些類,如果盲目的進(jìn)行隔離,將會(huì)在開發(fā)中引入大量的反射邏輯,這會(huì)極大的影響執(zhí)行性能。所以Sermant類加載結(jié)構(gòu)中添加了一個(gè)局部類加載機(jī)制,可以允許插件在切面出使用切面類的類加載器對(duì)用到的宿主類進(jìn)行類加載,從開發(fā)者視角來看,服務(wù)治理能力開發(fā)中,避免復(fù)雜的反射操作,開發(fā)效率提升巨大。
Sermant插件開發(fā)實(shí)戰(zhàn)Tips
? 基礎(chǔ)能力
Sermant服務(wù)治理插件簡(jiǎn)單來講就是一系列切面的集合,最終完成了復(fù)雜的治理能力。在面向切面編程時(shí),有兩個(gè)核心的概念,即Join point(切點(diǎn))——指定切面的橫切位置;Advice(通知)——切面執(zhí)行的具體行為。對(duì)應(yīng)Sermant的插件開發(fā)中也有邏輯與之對(duì)應(yīng),在Sermant中聲明切面位置的稱之為插件聲明,執(zhí)行切面邏輯的稱之為攔截器。
Sermant的插件聲明可以基于類名、超類、注解等進(jìn)行類定位,并通過方法名、類型、參數(shù)、返回值等進(jìn)行方法定位,定位完成后進(jìn)行字節(jié)碼增強(qiáng)。
Sermant的攔截器提供了Before、After、Throw三個(gè)關(guān)鍵的生命周期,并在其上提供了形如跳過方法執(zhí)行,修改方法參數(shù),修改方法返回,修改異常拋出等通用能力。
? 進(jìn)階能力——統(tǒng)一動(dòng)態(tài)配置
Sermant提供了一種基于分層模型設(shè)計(jì)的配置管理方案,它的核心組件包括Group和Key。Sermant通過不同的Group(分組信息)來對(duì)配置項(xiàng)進(jìn)行隔離,使配置管理更具靈活性和可擴(kuò)展性;同時(shí),通過Key對(duì)配置項(xiàng)進(jìn)行具體屬性的標(biāo)識(shí),實(shí)現(xiàn)了對(duì)配置項(xiàng)的精準(zhǔn)控制和高效維護(hù),Sermant的模型概念在各主流配置中心中均有對(duì)應(yīng)。
最重要的一點(diǎn),Sermant為開發(fā)者和使用者屏蔽了配置中心的差異,可以無需修改任何代碼,就可以讓Sermant對(duì)接多種配置中心。插件開發(fā)者,只需要通過Group和Key進(jìn)行配置的劃分,無需了解各配置中心的實(shí)際字段,就可以開發(fā)出不依賴配置中心的動(dòng)態(tài)服務(wù)治理能力。
? 進(jìn)階能力——統(tǒng)一日志
Sermant日志開發(fā)者在使用統(tǒng)一日志時(shí),通過JUL接口來構(gòu)造日志即可,無需再依賴其他第三方日志門面依賴,僅需使用Java 原生日志接口,并且Sermant提供的統(tǒng)一日志是和微服務(wù)完全隔離的,避免了邊車日志系統(tǒng)對(duì)微服務(wù)日志系統(tǒng)帶來不良的影響。
除此之外,Sermant中改造了日志處理器,針對(duì)高級(jí)別的日志進(jìn)行了監(jiān)控,可以配置將高級(jí)別日志進(jìn)行異常的上報(bào),可以第一時(shí)間發(fā)現(xiàn)邊車運(yùn)行的異常狀態(tài),無需開發(fā)者進(jìn)行二次開發(fā)。
Follow me,一起動(dòng)手實(shí)戰(zhàn)“插件開發(fā)”
在開發(fā)實(shí)戰(zhàn)環(huán)節(jié),帶領(lǐng)開發(fā)者開發(fā)了一個(gè)簡(jiǎn)單的監(jiān)控能力,針對(duì)特定的類和方法進(jìn)行監(jiān)控,通過定義插件聲明和攔截點(diǎn),就可以快速完成一個(gè)簡(jiǎn)單監(jiān)控插件的開發(fā)。
在基礎(chǔ)能力完成后,又通過動(dòng)態(tài)配置的方式,控制了監(jiān)控能力的開啟和關(guān)閉,并且通過Sermant統(tǒng)一日志,將異常場(chǎng)景所產(chǎn)生的日志進(jìn)行了監(jiān)控,通過簡(jiǎn)單的幾個(gè)步驟,就可完成一個(gè)非侵入的監(jiān)控組件,可見Sermant的插件開發(fā)學(xué)習(xí)曲線對(duì)開發(fā)者非常友好。
關(guān)注#華為云開發(fā)者聯(lián)盟#點(diǎn)擊下方,第一時(shí)間了解華為云新鮮技術(shù)~