1背景
隨著開源社區(qū)和云計(jì)算的快速推進(jìn),云原生微服務(wù)作為新型應(yīng)用系統(tǒng)的核心架構(gòu),得到了越來越廣泛的應(yīng)用。根據(jù)Gartner對(duì)微服務(wù)的定義:“微服務(wù)是范圍狹窄、封裝緊密、松散耦合、可獨(dú)立部署且可獨(dú)立伸縮的應(yīng)用程序組件。”
![]()
微服務(wù)之父,馬丁.福勒,對(duì)微服務(wù)概述如下:就目前而言,對(duì)于微服務(wù)業(yè)界并沒有一個(gè)統(tǒng)一的、標(biāo)準(zhǔn)的定義。但通常而言,微服務(wù)架構(gòu)是一種架構(gòu)模式或者說是一種架構(gòu)風(fēng)格,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),每個(gè)服務(wù)運(yùn)行在自己獨(dú)立的進(jìn)程中,服務(wù)之間互相協(xié)調(diào)、互相配合,為用戶提供最終價(jià)值。服務(wù)之間采用輕量級(jí)的通信機(jī)制互相溝通(通常是基于HTTP的RESTful API)。
每個(gè)服務(wù)都圍繞著具體業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨(dú)立地部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等,這種方法能夠提高應(yīng)用系統(tǒng)的響應(yīng)速度、靈活性和部署彈性,能夠按照業(yè)務(wù)發(fā)展與時(shí)俱進(jìn)快速迭代和優(yōu)化。目前行內(nèi)越來越多的應(yīng)用服務(wù)系統(tǒng)已升級(jí)改造為微服務(wù)架構(gòu),對(duì)現(xiàn)有應(yīng)用監(jiān)控體系提出了新的挑戰(zhàn)。
為推動(dòng)微服務(wù)應(yīng)用監(jiān)控體系的建設(shè)和發(fā)展,探索微服務(wù)全鏈路監(jiān)控技術(shù)在行內(nèi)的實(shí)踐路徑,我們重點(diǎn)引入了SkyWalking開源可觀測平臺(tái),通過非代碼侵入的方式,采集微服務(wù)全鏈路監(jiān)控信息,以可視化的方式展現(xiàn)微服務(wù)系統(tǒng)的拓?fù)潢P(guān)系、追蹤交易鏈路、精準(zhǔn)識(shí)別性能瓶頸,彌補(bǔ)現(xiàn)有測試工具和方法對(duì)微服務(wù)全鏈路應(yīng)用監(jiān)控的缺失。
2 SkyWalking簡介
SkyWalking是開源的可觀測平臺(tái)的APM系統(tǒng),專為微服務(wù),云原生架構(gòu)和基于容器(Docker,k8s,Mesos等)的架構(gòu)設(shè)計(jì)的應(yīng)用程序性能監(jiān)控工具,用于收集、分析、聚合和可視化來自服務(wù)和云原生基礎(chǔ)設(shè)施的數(shù)據(jù)。提供分布式追蹤、服務(wù)網(wǎng)格遙測分析、度量聚合和可視化一體化解決方案。SkyWalking主要由以下四大部分構(gòu)成:
Agent代理程序
探針收集數(shù)據(jù)并根據(jù)SkyWalking的要求對(duì)數(shù)據(jù)進(jìn)行重新格式化(不同的探測器支持不同的來源);Agent運(yùn)行在各個(gè)服務(wù)實(shí)例中,負(fù)責(zé)采集服務(wù)實(shí)例的Trace、Metrics等數(shù)據(jù),然后通過gRPC方式上報(bào)給SkyWalking后端,供OAP服務(wù)器進(jìn)行分析,本文將在第3章詳細(xì)介紹Agent代理程序。
OAP服務(wù)器
SkyWalking的OAP(Observability Analysis Platform,觀測分析平臺(tái))是一個(gè)用于分析鏈路采樣數(shù)據(jù)的分析計(jì)算系統(tǒng)。
在OAP服務(wù)主要需要計(jì)算以下三類數(shù)據(jù):
(1)Record數(shù)據(jù)
記錄的鏈路數(shù)據(jù),如Trace、訪問日志等數(shù)據(jù),由RecordStreamProcessor進(jìn)行處理。
(2)Metrics數(shù)據(jù)
記錄的指標(biāo)數(shù)據(jù),絕大部分的OAL(Observability Analysis Language)指標(biāo)都將生成這類數(shù)據(jù),由MetricsStreamProcessor進(jìn)行處理。
(3)TopN數(shù)據(jù)
記錄的周期性的采樣數(shù)據(jù),如慢SQL的周期性采集,由TopNStreamProcessor進(jìn)行處理。
Trace、訪問日志等這類的明細(xì)數(shù)據(jù),數(shù)據(jù)量比較大,但不需要?dú)w并處理,所以在OAP節(jié)點(diǎn)內(nèi)部即可處理完成,這些明細(xì)數(shù)據(jù)采用緩存、異步批量處理和流式寫入的方式將它們寫入到外部存儲(chǔ)器(Storage)中。
絕大部分由OAL(Observability Analysis Language)定義的指標(biāo)數(shù)據(jù)是需要微服務(wù)聚合計(jì)算的,所以在OAP集群計(jì)算流中將其分為了兩個(gè)步驟。
步驟一,接收和解析Agent代理程序發(fā)送的數(shù)據(jù),并執(zhí)行當(dāng)前OAP服務(wù)節(jié)點(diǎn)內(nèi)的數(shù)據(jù)聚合,使用OAL或其他聚合模式。對(duì)于不需要聚合的數(shù)據(jù),直接將其寫入到外部存儲(chǔ)器(Storage)中;如果是需要微服務(wù)聚合的數(shù)據(jù),根據(jù)一定的路由規(guī)則發(fā)送給指定的OAP服務(wù)節(jié)點(diǎn)。
步驟二,接收和解析經(jīng)步驟一處理的數(shù)據(jù),之后進(jìn)行二次聚合計(jì)算,并將結(jié)果數(shù)據(jù)寫入到外部存儲(chǔ)器(Storage)中。
針對(duì)以上兩個(gè)步驟,OAP服務(wù)節(jié)點(diǎn)被分為Receiver(處理步驟一)和Aggregator(處理步驟二)兩種角色。
默認(rèn)情況下,所有OAP服務(wù)節(jié)點(diǎn)均為Mixed混合角色,其既可以執(zhí)行步驟一的操作,也可以執(zhí)行步驟二的操作。在大規(guī)模系統(tǒng)部署SkyWalking的場景下,可根據(jù)網(wǎng)絡(luò)流量進(jìn)行角色分離的兩級(jí)部署。
OAP服務(wù)器還服務(wù)響應(yīng)SkyWalking UI界面發(fā)送來的查詢請(qǐng)求,將前面持久化的數(shù)據(jù)查詢出來,組成正確的響應(yīng)結(jié)果返回給UI界面進(jìn)行展示。
Storage數(shù)據(jù)庫存儲(chǔ)
作為OAP服務(wù)的外部存儲(chǔ)設(shè)備,負(fù)責(zé)數(shù)據(jù)的存儲(chǔ),支持多種存儲(chǔ)類型,可以使用既有的存儲(chǔ)系統(tǒng),如ElasticSearch,Mysql等,也可以自定義實(shí)現(xiàn)存儲(chǔ)系統(tǒng)。SkyWalking數(shù)據(jù)可以選擇存儲(chǔ)在已實(shí)現(xiàn)的ElasticSearch,Mysql,TiDB,InfluxDB,H2的持久化系統(tǒng),其中H2是內(nèi)存數(shù)據(jù)庫,存儲(chǔ)的數(shù)據(jù)在內(nèi)存里,不落到磁盤上,重啟SkyWalking服務(wù)會(huì)導(dǎo)致數(shù)據(jù)丟失,是默認(rèn)的存儲(chǔ)方式,一般線上使用ElasticSearch集群作為其后端存儲(chǔ)。
UI界面
負(fù)責(zé)可視化和管理SkyWalking數(shù)據(jù),前后端分離,該UI界面負(fù)責(zé)將用戶的查詢操作封裝為GraphQL請(qǐng)求提交給OAP后端觸發(fā)后續(xù)的查詢操作,待拿到查詢結(jié)果之后會(huì)在前端負(fù)責(zé)展示并可以查看鏈路調(diào)用關(guān)系,查看各種監(jiān)控指標(biāo),性能指標(biāo)等等。
由以上對(duì)構(gòu)成SkyWalking的各分系統(tǒng)的介紹可知,Agent代理程序負(fù)責(zé)收集各種鏈路采樣數(shù)據(jù),通過GRPC的?式傳遞給OAP進(jìn)行分析并且存儲(chǔ)到數(shù)據(jù)庫中,最終通過UI界面將分析的統(tǒng)計(jì)報(bào)表、服務(wù)依賴、拓?fù)潢P(guān)系圖展示出來。
3 SkyWalking應(yīng)用擴(kuò)展及性能調(diào)優(yōu)
自定義插件開發(fā)示例,基于某系統(tǒng)開發(fā)自定義插件,將其部署至SkyWalking部署包的plugins目錄內(nèi)。
對(duì)某查詢接口執(zhí)行調(diào)用操作,多個(gè)線程都可以在SkyWalking中查看方法的采樣信息,如圖1所示:
![]()
圖1某查詢方法的采樣信息
點(diǎn)擊圖1中的某查詢方法鏈接,可以查看詳細(xì)的跨度信息,如圖2所示。
![]()
圖2跨度信息
由以上信息可知,可以清晰看到我們添加的三個(gè)tag標(biāo)簽分別為:invoke開始時(shí)間,invoke結(jié)束時(shí)間,系統(tǒng)間查詢方法執(zhí)行時(shí)長(ms)。
系統(tǒng)重構(gòu),架構(gòu)特點(diǎn)為多微服務(wù)、多鏈路系統(tǒng)。可應(yīng)用參數(shù)配置檢查、可觀測性技術(shù)、數(shù)據(jù)移植、同步驗(yàn)證4個(gè)課題的成果。
性能調(diào)優(yōu)示例,為了盡可能減少SkyWaling Agent對(duì)業(yè)務(wù)性能測試的影響,真實(shí)監(jiān)控出業(yè)務(wù)系統(tǒng)性能瓶頸,我們對(duì)SkywalkingAgent進(jìn)行了一些性能調(diào)優(yōu),通過調(diào)整采樣頻率和采樣數(shù)量等相關(guān)參數(shù),減少部署SkyWalking Agent后產(chǎn)生的額外的性能損耗。圖3是通過對(duì)同一只交易在未部署SkyWaling Agent情況下、已部署SkyWaling Agent標(biāo)準(zhǔn)化(未性能調(diào)優(yōu))情況下、已部署SkyWaling Agent已性能調(diào)優(yōu)情況下,在相同并發(fā)下的性能測試結(jié)果對(duì)比,調(diào)優(yōu)之后,我們發(fā)現(xiàn)性能表現(xiàn)相對(duì)于標(biāo)準(zhǔn)化部署場景下有提升,相較未部署agent情況,將性能損耗降到最小。
![]()
入群學(xué)習(xí)交流↓↓↓↓↓↓
![]()
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺(tái)“網(wǎng)易號(hào)”用戶上傳并發(fā)布,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.