亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        輕量級(jí)分布式追蹤系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)

        2020-10-09 11:17:11溫小斌張達(dá)諸映晴
        計(jì)算機(jī)時(shí)代 2020年9期

        溫小斌 張達(dá) 諸映晴

        摘要:分布式追蹤是為了解決微服務(wù)環(huán)境下服務(wù)調(diào)用的可觀察性問題。鑒于目前追蹤系統(tǒng)存在的各種不足之處,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)輕量級(jí)的分布式追蹤系統(tǒng),實(shí)現(xiàn)了服務(wù)調(diào)用鏈、調(diào)用頻次、響應(yīng)時(shí)間等觀察指標(biāo)的追蹤?;贘ava agent和字節(jié)碼編輯技術(shù)實(shí)現(xiàn)追蹤代理程序,生成追蹤圖數(shù)據(jù),并通過gRPC發(fā)送到監(jiān)控中心。追蹤系統(tǒng)做到了對(duì)應(yīng)用系統(tǒng)的零侵入,并且實(shí)現(xiàn)了OpenTracing標(biāo)準(zhǔn),能夠方便地與各種運(yùn)維監(jiān)控系統(tǒng)集成。

        關(guān)鍵詞:分布式追蹤;微服務(wù);運(yùn)維;監(jiān)控;OpenTracing

        中圖分類號(hào):TP319

        文獻(xiàn)標(biāo)識(shí)碼:A

        文章編號(hào):1006-8228(2020)09-64-04

        Design and implementation of lightweight distributed tracing system

        Wen Xiaobin, Zhang Da, Zhu Yingqing

        (Ningbo Hadlinks IoT Technology Co., Ltd., Ningbo, Zhejiang 315000, China)

        Abstract: Distributed tracing system is to make service call observable in microservice context. To overcome the shortcomings ofcurrent systems, a lightweight distributed tracing system is designed and implemented. It makes metrics in application observable.including chain of service dependencies, calling frequency and response time. Based on Java agent and byte-code editor. a tracingagent is programmed to create tracing data with graph structure, and send the data to monitoring center via gRPC. The tracingsystem achieves zero intrusion into the application, and conforms to OpenTracing standard, it can be easily integrated with variousoperation and maintenance monitoring systems.

        Key words: distribLLted tracing; microservice; operation and maintenance; monitoring; OpenTracinii

        0引言

        微服務(wù)架構(gòu)已經(jīng)成為廣泛使用的架構(gòu)模式,它把復(fù)雜而龐大的業(yè)務(wù)系統(tǒng)拆分成一些粒度更小而且可以獨(dú)立部署的服務(wù)進(jìn)程,實(shí)現(xiàn)了業(yè)務(wù)的解耦與復(fù)用,方便部署、擴(kuò)展和維護(hù)[1]。分布式追蹤技術(shù)[2]就是在這種背景下誕生的,它主要解決服務(wù)調(diào)用的可觀察性問題,包括服務(wù)調(diào)用鏈、調(diào)用頻次、響應(yīng)時(shí)間、異常調(diào)用等觀察指標(biāo)。為此業(yè)界進(jìn)行了一系列的研究,開發(fā)出了各種分布式追蹤系統(tǒng),企業(yè)界的典型代表有谷歌的Dapper[3]、阿里巴巴的EagleEye[4],學(xué)術(shù)界的研究成果有MTracer[5],開源社區(qū)的代表性項(xiàng)目有Zipkin和SkyWalking。

        然而這些系統(tǒng)存在以下幾個(gè)方面的問題:①這些系統(tǒng)普遍龐大而復(fù)雜,過于重量級(jí),對(duì)應(yīng)用環(huán)境的依賴程度高,難以實(shí)現(xiàn)和使用;②對(duì)業(yè)務(wù)系統(tǒng)的侵入性太強(qiáng),需要在業(yè)務(wù)代碼中穿插大量追蹤代碼,破壞了業(yè)務(wù)代碼的連貫性和整體性;③自成體系,難以與其他監(jiān)控系統(tǒng)相結(jié)合。

        為了解決上述問題,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)輕量級(jí)的分布式追蹤系統(tǒng)?;贘avaagent和字節(jié)碼編輯技術(shù),做到了對(duì)業(yè)務(wù)系統(tǒng)的零侵入,并且遵循OpenTracing標(biāo)準(zhǔn),能夠方便地集成到其他運(yùn)維監(jiān)控系統(tǒng)。

        1設(shè)計(jì)目標(biāo)

        對(duì)系統(tǒng)進(jìn)行設(shè)計(jì)的時(shí)候,主要以如下目標(biāo)作為出發(fā)點(diǎn):

        1)功能上,需要實(shí)現(xiàn)服務(wù)調(diào)用鏈、調(diào)用頻次、響應(yīng)時(shí)間、異常調(diào)用等觀察指標(biāo)的追蹤。

        (2)輕量級(jí)。對(duì)應(yīng)用環(huán)境的依賴少,使用方便。

        (3)對(duì)業(yè)務(wù)系統(tǒng)零侵入。不會(huì)對(duì)業(yè)務(wù)系統(tǒng)產(chǎn)生功能和性能上的影響,無需對(duì)業(yè)務(wù)系統(tǒng)代碼做任何修改。

        (4)分布式追蹤作為運(yùn)維內(nèi)容的一部分,能夠方便地集成到各種運(yùn)維監(jiān)控系統(tǒng)中。

        (5)支持主流的微服務(wù)開發(fā)框架,包括ApacheDubbo和SpringCloud。

        2追蹤圖

        追蹤圖用于記錄分布式調(diào)用鏈的拓?fù)潢P(guān)系,它本質(zhì)上是一個(gè)有向圖數(shù)據(jù)結(jié)構(gòu)。一個(gè)追蹤圖對(duì)應(yīng)一個(gè)完整的調(diào)用鏈,使用唯一的traceID表示。調(diào)用鏈由若干個(gè)追蹤段segment組成,segment代表分布式系統(tǒng)中的一個(gè)應(yīng)用進(jìn)程,在圖中用頂點(diǎn)表示。一個(gè)segment會(huì)生成若干個(gè)span,span代表最終的調(diào)用單元,比如調(diào)用某個(gè)RPC方法,在圖中用有向邊表示。表1列出了追蹤圖中各信息的ID和含義。

        圖1展示了一個(gè)實(shí)際追蹤圖的示例,描述了追蹤圖的創(chuàng)建過程。

        (1)用戶向Web應(yīng)用發(fā)起一個(gè)請求,追蹤程序首先為該請求創(chuàng)建一個(gè)追蹤段(sengmentID=seg_w),如果traceID不存在,則會(huì)創(chuàng)建一個(gè)traceID。

        (2)Web應(yīng)用向Dubbo服務(wù)A發(fā)起請求時(shí),會(huì)創(chuàng)建一個(gè)span(spanID=1),同理,Web應(yīng)用向Dubbo服務(wù)B發(fā)起請求時(shí),也會(huì)創(chuàng)建一個(gè)span(spanID=2)。在同一個(gè)段中,spanID是依次遞增的,代表調(diào)用的先后順序。

        (3) Dubbo服務(wù)A收到請求后,追蹤程序同樣會(huì)創(chuàng)建一個(gè)追蹤段(segmentID=seg_a),同時(shí)會(huì)接收到調(diào)用者傳遞過來的參數(shù)traceID、callerSegmentID和spanID。

        (4)其他服務(wù)的調(diào)用也遵循上述步驟。最終,通過traceID、callerSegmentID、segmentID等數(shù)據(jù),可以將調(diào)用信息關(guān)聯(lián)起來,形成一個(gè)完整的追蹤圖。

        3追蹤代理

        追蹤代理用于獲取追蹤圖相關(guān)的數(shù)據(jù),在整個(gè)系統(tǒng)中承擔(dān)數(shù)據(jù)采集的任務(wù)。追蹤代理程序的設(shè)計(jì)和實(shí)現(xiàn),主要基于Javaagent和字節(jié)碼編輯兩項(xiàng)技術(shù),前者用于監(jiān)聽類的加載,攔截并獲取類文件的信息,后者用于編輯class文件,在其中加入分布式追蹤相關(guān)的代碼。圖2展示了追蹤代理程序的工作原理。

        在類加載時(shí),JVM會(huì)觸發(fā)ClassFileLoadHook事件,這是一個(gè)JVMTI事件,被觸發(fā)后會(huì)調(diào)用ClassFileTransformer接口,該接口是一個(gè)class文件轉(zhuǎn)換器,需要實(shí)現(xiàn)接口中的transform()方法,在該方法中對(duì)傳入的Java字節(jié)碼進(jìn)行重新編輯。追蹤相關(guān)的功能邏輯均在transform()方法中實(shí)現(xiàn),包括匹配需要監(jiān)控的Java類和方法,獲取并記錄traceID、segmentID、spanID等追蹤圖的數(shù)據(jù),并把這些數(shù)據(jù)發(fā)送到監(jiān)控中心。

        追蹤代理程序最終編譯成一個(gè)tracing-agent.jar文件,放入到各個(gè)應(yīng)用和服務(wù)程序中,沒有其他依賴,非常輕量級(jí)。應(yīng)用和服務(wù)的業(yè)務(wù)代碼,不需要做任何修改,即追蹤代理對(duì)應(yīng)用層的代碼是零侵入的。

        4系統(tǒng)實(shí)現(xiàn)

        4.1系統(tǒng)架構(gòu)

        如圖3所示,整個(gè)追蹤系統(tǒng)采用分布式架構(gòu),主要由追蹤代理和監(jiān)控中心兩部分組成。追蹤代理通過gRPC,往監(jiān)控中心發(fā)送探測到的追蹤數(shù)據(jù),數(shù)據(jù)格式遵循OpenTracing標(biāo)準(zhǔn)。監(jiān)控中心接收到這些追蹤數(shù)據(jù)后,負(fù)責(zé)數(shù)據(jù)的解析、存儲(chǔ)以及可視化展示。

        追蹤代理和監(jiān)控中心完全解耦,這樣便于把追蹤功能集成到各種運(yùn)維監(jiān)控系統(tǒng)之中。本文的監(jiān)控中心基于Galileo系統(tǒng)實(shí)現(xiàn)。Galileo是一個(gè)專門針對(duì)物聯(lián)網(wǎng)系統(tǒng)的自動(dòng)化運(yùn)維監(jiān)控系統(tǒng)[6],本文把分布式追蹤功能作為其中的一個(gè)功能模塊對(duì)其進(jìn)行擴(kuò)展開發(fā)。

        4.2關(guān)鍵技術(shù)

        除了前述的Javaagent和字節(jié)碼編輯技術(shù)以外,還有以下幾個(gè)關(guān)鍵技術(shù)點(diǎn),對(duì)系統(tǒng)的實(shí)現(xiàn)至關(guān)重要,決定了系統(tǒng)的可擴(kuò)展性和并發(fā)性能。

        (1) OpenTracing

        OpenTracing是一套通用的、標(biāo)準(zhǔn)的追蹤數(shù)據(jù)定義接口,規(guī)范了追蹤數(shù)據(jù)的數(shù)據(jù)模型和實(shí)現(xiàn)流程。這套規(guī)范由三個(gè)方面組成:標(biāo)準(zhǔn)化的span管理API;標(biāo)準(zhǔn)化的追蹤數(shù)據(jù)的跨進(jìn)程傳播API;標(biāo)準(zhǔn)化的active span管理API。實(shí)現(xiàn)這套規(guī)范意味著數(shù)據(jù)采集方只需專注于如何追蹤系統(tǒng)的運(yùn)行流程,而無需關(guān)注追蹤數(shù)據(jù)的定義和格式。諸如Galileo這樣的運(yùn)維監(jiān)控平臺(tái)可以根據(jù)OpenTracing標(biāo)準(zhǔn)來解析接收到的數(shù)據(jù),方便系統(tǒng)之間的集成。

        (2)gRPC

        追蹤代理與監(jiān)控中心之間的網(wǎng)絡(luò)通訊,采用gRPC技術(shù)。gRPC是一個(gè)高效的RPC框架,基于HTTP/2.0協(xié)議,傳輸?shù)氖荘rotobuf格式的數(shù)據(jù)。與傳統(tǒng)的HTTP/1.1相比,它使用了TCP長連接和多路復(fù)用技術(shù),具有更好的性能表現(xiàn),相同并發(fā)量下消耗更少的資源。另外,gRPCClient向gRPCServer發(fā)送數(shù)據(jù)的時(shí)候,使用獨(dú)立的線程池異步發(fā)送,不影響業(yè)務(wù)代碼的執(zhí)行。

        5結(jié)束語

        針對(duì)微服務(wù)調(diào)用的可觀察性,本文沒計(jì)并實(shí)現(xiàn)了一個(gè)輕量級(jí)的分布式追蹤系統(tǒng),實(shí)現(xiàn)了服務(wù)的調(diào)用鏈、調(diào)用頻次、響應(yīng)時(shí)間、異常調(diào)用等觀察指標(biāo)的追蹤,并應(yīng)用到多個(gè)正式商用的物聯(lián)網(wǎng)項(xiàng)目,取得了不錯(cuò)的效果。下一步的研究工作,是計(jì)劃把分布式追蹤擴(kuò)展到數(shù)據(jù)庫調(diào)用方面,包括MySQL、MongoDB、Redis等數(shù)據(jù)庫的連接池調(diào)用的追蹤。

        參考文獻(xiàn)(References):

        [1]Chris Richardson. Microservices Patterns: With Examplesin Java[M]. Manning Publications, 2019.

        [2]Yuri Shkuro. Mastering Distributed Tracing[M]. PacktPublishing,2019.

        [3] B. H. Sigelman, L. A. Barroso, M. Burrows, P.Stephenson, M. Plakal, et al.Dapper, a Large-ScaleDistributed Systems Tracing Infrastructure[R]. GoogleTechnical Report,Googlelnc, 20 10.

        [4]鐘華,企業(yè)IT架構(gòu)轉(zhuǎn)型之道:阿里巴巴中臺(tái)戰(zhàn)略思想與架構(gòu)實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2017.

        [5]J. Zhou,Z.Chen,H.Mi,J.Wang. MTracer:A Trace-Oriented Monitoring Framework for Medium-ScaleDistributed Systems[Al. IEEE 8th International Sympo-sium on Service Oriented System Engineering[C],2014:266-271

        [6]溫小斌.物聯(lián)網(wǎng)系統(tǒng)自動(dòng)化監(jiān)控的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)時(shí)代,2019.6:34-36

        收稿日期:2020-05-14

        作者簡介:溫小斌(1981-),男,江西贛州人,碩士,主要研究方向:物聯(lián)網(wǎng)、分布式系統(tǒng)。

        内射中出日韩无国产剧情| 搡老女人老妇女老熟妇69| 亚洲中文乱码在线观看| 国产精品久久久久久久久久红粉 | 久久久久亚洲女同一区二区| 日韩熟女一区二区三区 | 天天做天天摸天天爽天天爱| 狠狠色噜噜狠狠狠狠色综合久| 视频一区精品自拍| 看中文字幕一区二区三区| 天天做天天爱夜夜夜爽毛片| 无码精品日韩中文字幕| 亚洲欧美日韩国产精品一区| 日本在线一区二区在线| 无码精品人妻一区二区三区漫画| 性生交大片免费看淑女出招| 中文字幕久热精品视频免费| 人妻熟女中文字幕av| 风韵丰满熟妇啪啪区老熟熟女| 欧美性狂猛xxxxx深喉| 大屁股少妇一区二区无码| 我揉搓少妇好久没做高潮| 欧美大片aaaaa免费观看| 一本色道久久综合狠狠躁 | 精品在线视频免费在线观看视频| 视频在线观看一区二区三区| 性一交一乱一伧国产女士spa| 中文字幕巨乱亚洲| 亚洲av综合日韩精品久久| 久久无码字幕中文久久无码 | 亚洲一区二区三区av色婷婷| 日本精品女优一区二区三区| 亚洲欧洲日本综合aⅴ在线| 国产成人亚洲合集青青草原精品| 久草中文在线这里只有精品| 日本无码欧美一区精品久久| 欧美日韩在线观看免费| 亚洲精品成人久久av| 国产99久久久国产精品~~牛| 国产zzjjzzjj视频全免费| 538在线视频|