一文讀懂分布式追蹤的歷史發(fā)展點滴

在分布式系統(tǒng)中,應(yīng)用程序通常由多個微服務(wù)或組件組成,這些組件可能分布在不同的計算機(jī)、容器或云環(huán)境中。這種分布式環(huán)境使得監(jiān)測和調(diào)試應(yīng)用程序變得更加困難,因為單個請求可能會在多個組件之間傳遞,并涉及多個網(wǎng)絡(luò)調(diào)用。

本文來自微信公眾號“twt企業(yè)IT社區(qū)”,作者/李杰,專注于Java虛擬機(jī)技術(shù)、云原生技術(shù)領(lǐng)域的探索與研究。

什么是“Distributed Tracing-分布式追蹤”?

Distributed Tracing(分布式追蹤)是一種用于監(jiān)測和分析分布式應(yīng)用程序的技術(shù)和方法。它旨在追蹤和記錄應(yīng)用程序中的請求和操作,從而提供對應(yīng)用程序的全局視圖和性能分析。

在分布式系統(tǒng)中,應(yīng)用程序通常由多個微服務(wù)或組件組成,這些組件可能分布在不同的計算機(jī)、容器或云環(huán)境中。這種分布式環(huán)境使得監(jiān)測和調(diào)試應(yīng)用程序變得更加困難,因為單個請求可能會在多個組件之間傳遞,并涉及多個網(wǎng)絡(luò)調(diào)用。

從本質(zhì)上來講,分布式追蹤的核心思想是在整個應(yīng)用程序的各個組件之間創(chuàng)建一條可追蹤的路徑。當(dāng)一個請求進(jìn)入系統(tǒng)時,它被賦予一個唯一的標(biāo)識符(例如Trace ID),然后隨著請求在不同組件之間傳遞,這個標(biāo)識符會隨之傳遞。每個組件在處理請求時都會生成相關(guān)的追蹤數(shù)據(jù),例如開始時間、結(jié)束時間、執(zhí)行時間、調(diào)用的組件等。

1.png

這些追蹤數(shù)據(jù)被收集和匯總,通常存儲在專門的分布式追蹤系統(tǒng)中。開發(fā)人員可以使用這些數(shù)據(jù)來分析應(yīng)用程序的性能瓶頸、調(diào)用鏈路和錯誤。通過可視化界面或查詢語言,他們可以查看整個請求的路徑和時間線,并識別潛在的性能問題和故障原因。

通常來講,在最為基本的層面上,追蹤解決方案從軟件可觀測性開始,通過從外部輸出推斷系統(tǒng)的內(nèi)部狀態(tài)。然而,由于這是一個相對不精確的過程,為了更準(zhǔn)確地讀取和記錄各個組件的情況,我們希望引入遙測技術(shù)來捕獲和測量數(shù)據(jù)。一旦系統(tǒng)具備遙測功能,我們就可以開始通過分布式追蹤來觀測系統(tǒng)級別發(fā)生的情況。

在云原生計算中,我們通常使用分布式系統(tǒng)和微服務(wù)架構(gòu),因此分布式追蹤成為日常調(diào)試和監(jiān)控的重要組成部分。它可以幫助我們理解請求是如何在多個服務(wù)之間流動的,并提供關(guān)于性能、錯誤和依賴關(guān)系的有用信息。通過分布式追蹤,我們可以更好地理解系統(tǒng)中的瓶頸、故障和性能問題,并采取適當(dāng)?shù)男袆觼砀倪M(jìn)和優(yōu)化我們的應(yīng)用程序。

因此,分布式追蹤在軟件開發(fā)和運(yùn)維中具有重要意義,它提供了對分布式系統(tǒng)中請求流程和組件交互的全局視圖,幫助我們診斷問題、監(jiān)控性能并改進(jìn)系統(tǒng)的可靠性。

“Distributed Tracing-分布式追蹤”的歷史發(fā)展脈絡(luò)

Distributed Tracing(分布式追蹤)的發(fā)展歷史可以追溯到分布式系統(tǒng)和微服務(wù)架構(gòu)的出現(xiàn)。下面是分布式追蹤的一些關(guān)鍵里程碑和發(fā)展階段,具體可參考如下:

1.png

1、Google Dapper

Google于2003年發(fā)布了一篇題為《Dapper,a Large-Scale Distributed Systems Tracing Infrastructure》的論文,這標(biāo)志著分布式追蹤的重要里程碑。這篇論文詳細(xì)介紹了Google內(nèi)部使用的分布式追蹤系統(tǒng)Dapper,該系統(tǒng)的設(shè)計和實現(xiàn)為后來的分布式追蹤技術(shù)奠定了基礎(chǔ)。

在此篇論文中,Google首次提出了分布式追蹤的概念,并探索了關(guān)鍵的技術(shù)和方法。其中包括請求追蹤,即追蹤一個請求在分布式系統(tǒng)中的整個路徑和生命周期。通過跨服務(wù)追蹤,Dapper能夠追蹤一個請求在不同服務(wù)之間的傳遞和處理過程,從而提供全局的視圖和上下文。為了應(yīng)對大規(guī)模系統(tǒng)中的性能和存儲壓力,Dapper引入了采樣技術(shù),僅記錄部分請求的追蹤數(shù)據(jù),而非全部。此外,Dapper還提供了可視化工具,使開發(fā)人員能夠直觀地查看和分析追蹤數(shù)據(jù),以診斷和解決問題。

這篇論文的發(fā)表對于分布式系統(tǒng)的可觀察性和調(diào)試技術(shù)產(chǎn)生了深遠(yuǎn)的影響。它啟發(fā)了后續(xù)的研究和工具開發(fā),促進(jìn)了分布式追蹤技術(shù)的進(jìn)一步發(fā)展和應(yīng)用。許多開源項目和商業(yè)工具都受到Dapper的啟發(fā),并致力于提供更強(qiáng)大、靈活和易用的分布式追蹤解決方案。因此,Dapper論文標(biāo)志著分布式追蹤領(lǐng)域的開端,為我們理解和管理復(fù)雜的分布式系統(tǒng)提供了重要的方法和工具。

2、Twitter Zipkin

Twitter的Zipkin項目受到了Google Dapper論文的啟發(fā),并在其基礎(chǔ)上進(jìn)行了擴(kuò)展和改進(jìn)。Zipkin提供了一種簡單而強(qiáng)大的方式來收集、存儲和可視化分布式追蹤數(shù)據(jù)。通過引入Zipkin,開發(fā)人員可以更輕松地實施分布式追蹤,從而獲得對系統(tǒng)中請求流程和服務(wù)交互的全局視圖。

Zipkin采用了一些與Google Dapper類似的思想和技術(shù),例如請求追蹤和跨服務(wù)追蹤。它可以追蹤請求在分布式系統(tǒng)中的流動路徑,并記錄每個服務(wù)的處理時間和相關(guān)信息。這使得開發(fā)人員能夠快速識別和排查潛在的性能瓶頸和故障點。

除了數(shù)據(jù)收集和存儲功能,Zipkin還提供了直觀的可視化界面,使開發(fā)人員能夠直觀地查看和分析分布式追蹤數(shù)據(jù)。這些可視化工具可以幫助開發(fā)人員理解系統(tǒng)中的請求流程,識別慢速請求、異常情況和服務(wù)之間的依賴關(guān)系。

3、Uber Jaeger

在Zipkin發(fā)布三年后的2015年,Uber宣布開源了Jaeger,這是一個專門用于監(jiān)控、分析和排除微服務(wù)故障的分布式追蹤系統(tǒng)。

Jaeger項目的推出為分布式追蹤技術(shù)帶來了新的突破和創(chuàng)新。它在基于Zipkin的思想和經(jīng)驗的基礎(chǔ)上進(jìn)行了進(jìn)一步的改進(jìn)和優(yōu)化。Jaeger提供了更高級別的功能和性能,以適應(yīng)大規(guī)模微服務(wù)架構(gòu)的需求。

隨著其開源項目的成功,Jaeger于2018年成為云原生計算基金會(CNCF)的第12個托管項目。Jaeger的加入進(jìn)一步加強(qiáng)了分布式追蹤技術(shù)在云原生生態(tài)系統(tǒng)中的地位,并得到了更廣泛的社區(qū)支持和貢獻(xiàn)。

由于其持續(xù)的發(fā)展和社區(qū)的努力,Jaeger于2019年晉升為CNCF的畢業(yè)項目級別,這是CNCF下最高的可用級別。這表明Jaeger已經(jīng)成為一個成熟而可靠的分布式追蹤系統(tǒng),被廣泛認(rèn)可和采用。

4、OpenTracing

在2016年,CNCF(Cloud Native Computing Foundation)推出了OpenTracing,這是一個旨在推動分布式追蹤領(lǐng)域發(fā)展的開放標(biāo)準(zhǔn)。OpenTracing的目標(biāo)是提供一套廠商中立的API和規(guī)范,以便在應(yīng)用程序中輕松集成各種分布式追蹤系統(tǒng)。

OpenTracing的推出填補(bǔ)了分布式追蹤領(lǐng)域的一個重要空白。在此之前,不同的追蹤系統(tǒng)使用不同的API和數(shù)據(jù)格式,使得在不同系統(tǒng)之間切換和集成變得復(fù)雜困難。OpenTracing的出現(xiàn)為開發(fā)人員提供了一種通用的編程接口,使得他們可以方便地在不同的追蹤系統(tǒng)之間切換和集成,而無需修改現(xiàn)有的代碼。

通過OpenTracing,開發(fā)人員可以使用統(tǒng)一的API來定義和記錄跨多個服務(wù)的請求和操作。這些API可以輕松地插入到應(yīng)用程序的代碼中,以收集關(guān)鍵的追蹤信息。這些信息包括請求的流經(jīng)路徑、服務(wù)之間的依賴關(guān)系以及請求處理的時間等。

5、OpenCensus

除了OpenTracing,Google還推出了另一個項目名為OpenCensus。OpenCensus是一組適用于多種編程語言的庫,旨在幫助開發(fā)人員收集應(yīng)用程序的指標(biāo)和分布式追蹤數(shù)據(jù),并實時傳輸?shù)剿麄冞x擇的后端系統(tǒng)。這個項目的目標(biāo)是提供一種簡單而強(qiáng)大的方式來監(jiān)控和診斷應(yīng)用程序的運(yùn)行狀況。

通過OpenCensus,開發(fā)人員可以獲得對應(yīng)用程序的全面觀察,并獲得有關(guān)其性能、可用性和可靠性的關(guān)鍵洞察。收集和分析這些數(shù)據(jù)可以幫助開發(fā)人員優(yōu)化應(yīng)用程序的性能,提高用戶體驗,并及時發(fā)現(xiàn)和解決潛在的問題。

6、OpenTelemetry

在2020年,CNCF支持了一個重要的項目,即OpenTelemetry。OpenTelemetry的目標(biāo)是將OpenTracing和OpenCensus項目合并,成為下一代分布式追蹤和觀測標(biāo)準(zhǔn)。它提供了一套全面的工具、庫和規(guī)范,用于收集、傳輸和分析應(yīng)用程序的追蹤數(shù)據(jù)和度量指標(biāo)。

OpenTelemetry的出現(xiàn)是為了解決分布式追蹤和應(yīng)用程序觀測領(lǐng)域的挑戰(zhàn)。它整合了OpenTracing和OpenCensus的最佳實踐和思想,并提供了一個統(tǒng)一的解決方案。通過OpenTelemetry,開發(fā)人員可以方便地收集應(yīng)用程序的追蹤數(shù)據(jù)和度量指標(biāo),無論是在單個服務(wù)內(nèi)部還是跨多個服務(wù)之間。

OpenTelemetry提供了一系列的API和SDK,支持多種編程語言和平臺。開發(fā)人員可以使用這些工具將追蹤和度量的收集嵌入到應(yīng)用程序代碼中。這些工具會自動收集關(guān)鍵的數(shù)據(jù),例如請求處理時間、資源利用率和錯誤率等。同時,OpenTelemetry還支持分布式追蹤,能夠追蹤請求在整個分布式系統(tǒng)中的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系。

OpenTelemetry的設(shè)計具有靈活性和可擴(kuò)展性。它支持與多個后端系統(tǒng)集成,例如Jaeger、Zipkin、Prometheus和Google Cloud Monitoring等。開發(fā)人員可以根據(jù)自己的需求選擇適合的后端,并將收集到的數(shù)據(jù)實時傳輸?shù)竭@些后端系統(tǒng)中進(jìn)行分析和可視化。這使得開發(fā)人員能夠獲得對應(yīng)用程序的全面觀察,并及時識別和解決潛在的性能問題和故障。

通過OpenTelemetry,開發(fā)人員可以更加方便地實現(xiàn)應(yīng)用程序的監(jiān)控和觀測。它提供了一種統(tǒng)一的標(biāo)準(zhǔn)和工具,使得跨多個服務(wù)的追蹤和度量變得更加一致和可靠。開發(fā)人員可以利用OpenTelemetry的功能來優(yōu)化應(yīng)用程序的性能、可用性和可靠性,提供更好的用戶體驗。

為什么需要“Distributed Tracing-分布式追蹤”?

分布式追蹤是在分布式系統(tǒng)中追蹤和監(jiān)控請求的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系的過程。在現(xiàn)代的應(yīng)用程序架構(gòu)中,分布式系統(tǒng)變得越來越常見。這些系統(tǒng)通常由多個微服務(wù)組成,每個微服務(wù)負(fù)責(zé)處理特定的功能或業(yè)務(wù)邏輯。在這樣的環(huán)境下,分布式追蹤變得至關(guān)重要,原因如下:

1、故障排查和調(diào)試:在分布式系統(tǒng)中,當(dāng)出現(xiàn)故障或性能問題時,很難確定問題的根源。分布式追蹤可以幫助開發(fā)人員識別請求的流經(jīng)路徑,并記錄每個服務(wù)的處理時間和性能指標(biāo)。這樣,開發(fā)人員可以快速定位問題所在,并進(jìn)行故障排查和調(diào)試。

2、性能優(yōu)化:分布式追蹤可以提供對系統(tǒng)性能的全面可見性。通過收集和分析請求的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系,開發(fā)人員可以了解每個服務(wù)的性能瓶頸和熱點。這使得他們能夠有針對性地優(yōu)化系統(tǒng),提高整體性能和響應(yīng)時間。

3、容量規(guī)劃和資源管理:分布式追蹤可以提供對資源利用率的洞察。通過監(jiān)視請求的流經(jīng)路徑和服務(wù)的調(diào)用關(guān)系,開發(fā)人員可以了解每個服務(wù)的負(fù)載情況和資源消耗。這有助于進(jìn)行容量規(guī)劃和資源管理,確保系統(tǒng)具有足夠的資源來滿足用戶需求。

4、跨服務(wù)的請求追蹤:在分布式系統(tǒng)中,一個請求通常會涉及多個服務(wù)的協(xié)作。分布式追蹤可以追蹤請求在整個系統(tǒng)中的流經(jīng)路徑,并記錄每個服務(wù)的處理情況。這有助于了解服務(wù)之間的依賴關(guān)系和調(diào)用關(guān)系,提供全局的請求視圖,從而更好地理解系統(tǒng)的行為和性能。

5、監(jiān)控和警報:分布式追蹤可以與監(jiān)控和警報系統(tǒng)集成,提供對系統(tǒng)運(yùn)行狀況的實時監(jiān)控。通過收集和分析請求的追蹤數(shù)據(jù),可以生成關(guān)鍵的度量指標(biāo)和報告,用于監(jiān)控系統(tǒng)的健康狀況和性能指標(biāo)。同時,可以設(shè)置警報規(guī)則,及時發(fā)現(xiàn)并響應(yīng)系統(tǒng)中的異常情況。

總之,分布式追蹤在現(xiàn)代分布式系統(tǒng)中起著至關(guān)重要的作用。它幫助開發(fā)人員進(jìn)行故障排查、性能優(yōu)化、容量規(guī)劃和資源管理。此外,它還提供了對跨服務(wù)請求的全局視圖,以及與監(jiān)控和警報系統(tǒng)的集成,實現(xiàn)對系統(tǒng)的實時監(jiān)控和警報。通過分布式追蹤,開發(fā)人員可以更好地理解和管理復(fù)雜的分布式系統(tǒng),提供高性能、可靠和可伸縮的應(yīng)用程序。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論