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