999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

輕量級分布式追蹤系統的設計與實現

2020-10-09 11:17:11溫小斌張達諸映晴
計算機時代 2020年9期

溫小斌 張達 諸映晴

摘要:分布式追蹤是為了解決微服務環境下服務調用的可觀察性問題。鑒于目前追蹤系統存在的各種不足之處,設計并實現了一個輕量級的分布式追蹤系統,實現了服務調用鏈、調用頻次、響應時間等觀察指標的追蹤?;贘ava agent和字節碼編輯技術實現追蹤代理程序,生成追蹤圖數據,并通過gRPC發送到監控中心。追蹤系統做到了對應用系統的零侵入,并且實現了OpenTracing標準,能夠方便地與各種運維監控系統集成。

關鍵詞:分布式追蹤;微服務;運維;監控;OpenTracing

中圖分類號:TP319

文獻標識碼:A

文章編號: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引言

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

然而這些系統存在以下幾個方面的問題:①這些系統普遍龐大而復雜,過于重量級,對應用環境的依賴程度高,難以實現和使用;②對業務系統的侵入性太強,需要在業務代碼中穿插大量追蹤代碼,破壞了業務代碼的連貫性和整體性;③自成體系,難以與其他監控系統相結合。

為了解決上述問題,設計并實現了一個輕量級的分布式追蹤系統?;贘avaagent和字節碼編輯技術,做到了對業務系統的零侵入,并且遵循OpenTracing標準,能夠方便地集成到其他運維監控系統。

1設計目標

對系統進行設計的時候,主要以如下目標作為出發點:

1)功能上,需要實現服務調用鏈、調用頻次、響應時間、異常調用等觀察指標的追蹤。

(2)輕量級。對應用環境的依賴少,使用方便。

(3)對業務系統零侵入。不會對業務系統產生功能和性能上的影響,無需對業務系統代碼做任何修改。

(4)分布式追蹤作為運維內容的一部分,能夠方便地集成到各種運維監控系統中。

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

2追蹤圖

追蹤圖用于記錄分布式調用鏈的拓撲關系,它本質上是一個有向圖數據結構。一個追蹤圖對應一個完整的調用鏈,使用唯一的traceID表示。調用鏈由若干個追蹤段segment組成,segment代表分布式系統中的一個應用進程,在圖中用頂點表示。一個segment會生成若干個span,span代表最終的調用單元,比如調用某個RPC方法,在圖中用有向邊表示。表1列出了追蹤圖中各信息的ID和含義。

圖1展示了一個實際追蹤圖的示例,描述了追蹤圖的創建過程。

(1)用戶向Web應用發起一個請求,追蹤程序首先為該請求創建一個追蹤段(sengmentID=seg_w),如果traceID不存在,則會創建一個traceID。

(2)Web應用向Dubbo服務A發起請求時,會創建一個span(spanID=1),同理,Web應用向Dubbo服務B發起請求時,也會創建一個span(spanID=2)。在同一個段中,spanID是依次遞增的,代表調用的先后順序。

(3) Dubbo服務A收到請求后,追蹤程序同樣會創建一個追蹤段(segmentID=seg_a),同時會接收到調用者傳遞過來的參數traceID、callerSegmentID和spanID。

(4)其他服務的調用也遵循上述步驟。最終,通過traceID、callerSegmentID、segmentID等數據,可以將調用信息關聯起來,形成一個完整的追蹤圖。

3追蹤代理

追蹤代理用于獲取追蹤圖相關的數據,在整個系統中承擔數據采集的任務。追蹤代理程序的設計和實現,主要基于Javaagent和字節碼編輯兩項技術,前者用于監聽類的加載,攔截并獲取類文件的信息,后者用于編輯class文件,在其中加入分布式追蹤相關的代碼。圖2展示了追蹤代理程序的工作原理。

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

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

4系統實現

4.1系統架構

如圖3所示,整個追蹤系統采用分布式架構,主要由追蹤代理和監控中心兩部分組成。追蹤代理通過gRPC,往監控中心發送探測到的追蹤數據,數據格式遵循OpenTracing標準。監控中心接收到這些追蹤數據后,負責數據的解析、存儲以及可視化展示。

追蹤代理和監控中心完全解耦,這樣便于把追蹤功能集成到各種運維監控系統之中。本文的監控中心基于Galileo系統實現。Galileo是一個專門針對物聯網系統的自動化運維監控系統[6],本文把分布式追蹤功能作為其中的一個功能模塊對其進行擴展開發。

4.2關鍵技術

除了前述的Javaagent和字節碼編輯技術以外,還有以下幾個關鍵技術點,對系統的實現至關重要,決定了系統的可擴展性和并發性能。

(1) OpenTracing

OpenTracing是一套通用的、標準的追蹤數據定義接口,規范了追蹤數據的數據模型和實現流程。這套規范由三個方面組成:標準化的span管理API;標準化的追蹤數據的跨進程傳播API;標準化的active span管理API。實現這套規范意味著數據采集方只需專注于如何追蹤系統的運行流程,而無需關注追蹤數據的定義和格式。諸如Galileo這樣的運維監控平臺可以根據OpenTracing標準來解析接收到的數據,方便系統之間的集成。

(2)gRPC

追蹤代理與監控中心之間的網絡通訊,采用gRPC技術。gRPC是一個高效的RPC框架,基于HTTP/2.0協議,傳輸的是Protobuf格式的數據。與傳統的HTTP/1.1相比,它使用了TCP長連接和多路復用技術,具有更好的性能表現,相同并發量下消耗更少的資源。另外,gRPCClient向gRPCServer發送數據的時候,使用獨立的線程池異步發送,不影響業務代碼的執行。

5結束語

針對微服務調用的可觀察性,本文沒計并實現了一個輕量級的分布式追蹤系統,實現了服務的調用鏈、調用頻次、響應時間、異常調用等觀察指標的追蹤,并應用到多個正式商用的物聯網項目,取得了不錯的效果。下一步的研究工作,是計劃把分布式追蹤擴展到數據庫調用方面,包括MySQL、MongoDB、Redis等數據庫的連接池調用的追蹤。

參考文獻(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]鐘華,企業IT架構轉型之道:阿里巴巴中臺戰略思想與架構實戰[M].機械工業出版社,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]溫小斌.物聯網系統自動化監控的設計與實現[J].計算機時代,2019.6:34-36

收稿日期:2020-05-14

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

主站蜘蛛池模板: 亚洲国产日韩欧美在线| 欧美成人怡春院在线激情| 亚洲性视频网站| 久久久久亚洲av成人网人人软件 | 免费不卡在线观看av| 91国语视频| 久久久噜噜噜| 992tv国产人成在线观看| 日本一区二区不卡视频| 日韩午夜片| 久久五月视频| 久久一本精品久久久ー99| 久久婷婷六月| 久草网视频在线| 精品91在线| 视频二区国产精品职场同事| 四虎综合网| 亚洲欧美在线综合图区| 91小视频在线观看免费版高清| 欧美色伊人| 国产成人久久综合777777麻豆| 亚洲综合18p| 一级一级一片免费| 国内精自线i品一区202| 国产www网站| 中文字幕久久波多野结衣| 午夜国产理论| 在线无码九区| 色香蕉网站| 欧美精品啪啪一区二区三区| 狂欢视频在线观看不卡| 无码一区18禁| 极品av一区二区| 青青青国产免费线在| 欧美精品v日韩精品v国产精品| 亚洲精品第一页不卡| 亚洲日本一本dvd高清| 国产一区二区网站| 色精品视频| 国产在线视频二区| 国产精品美人久久久久久AV| 国产欧美综合在线观看第七页| 亚洲欧美精品在线| 99re在线视频观看| 国产在线视频福利资源站| 国产欧美日韩18| 国产免费福利网站| 久草热视频在线| 国产女人在线| 亚洲欧美色中文字幕| 精品国产自在在线在线观看| 91在线精品麻豆欧美在线| 亚洲欧洲日产国码无码av喷潮| 国产乱人乱偷精品视频a人人澡| 国产成人做受免费视频| 国产精品福利一区二区久久| 看看一级毛片| 九色最新网址| 国产欧美一区二区三区视频在线观看| 久久99国产综合精品1| 国产成人免费观看在线视频| 麻豆国产在线观看一区二区| 欧美国产精品不卡在线观看| 欧美不卡二区| 国产性生大片免费观看性欧美| 亚洲国产综合自在线另类| 欧美激情,国产精品| 国产精品区网红主播在线观看| 秋霞午夜国产精品成人片| 中文字幕日韩久久综合影院| 亚洲中文字幕久久无码精品A| 黄片一区二区三区| 国产一二视频| 国产精品自在在线午夜区app| 国产成人精品2021欧美日韩| 亚洲乱伦视频| 久久这里只有精品免费| 日韩精品亚洲人旧成在线| 99ri精品视频在线观看播放| 99久久性生片| 亚洲欧美不卡视频| 亚洲天堂视频在线观看|