一文讀懂分布式追蹤的歷史發(fā)展點(diǎn)滴
Hello folks,我是 Luga,今天我們來聊一下可觀測(cè)生態(tài)領(lǐng)域相關(guān)的技術(shù) - Distributed Tracing(分布式追蹤)。
什么是 “Distributed Tracing - 分布式追蹤” ?
Distributed Tracing(分布式追蹤)是一種用于監(jiān)測(cè)和分析分布式應(yīng)用程序的技術(shù)和方法。它旨在追蹤和記錄應(yīng)用程序中的請(qǐng)求和操作,從而提供對(duì)應(yīng)用程序的全局視圖和性能分析。
在分布式系統(tǒng)中,應(yīng)用程序通常由多個(gè)微服務(wù)或組件組成,這些組件可能分布在不同的計(jì)算機(jī)、容器或云環(huán)境中。這種分布式環(huán)境使得監(jiān)測(cè)和調(diào)試應(yīng)用程序變得更加困難,因?yàn)閱蝹€(gè)請(qǐng)求可能會(huì)在多個(gè)組件之間傳遞,并涉及多個(gè)網(wǎng)絡(luò)調(diào)用。
從本質(zhì)上來講,分布式追蹤的核心思想是在整個(gè)應(yīng)用程序的各個(gè)組件之間創(chuàng)建一條可追蹤的路徑。當(dāng)一個(gè)請(qǐng)求進(jìn)入系統(tǒng)時(shí),它被賦予一個(gè)唯一的標(biāo)識(shí)符(例如Trace ID),然后隨著請(qǐng)求在不同組件之間傳遞,這個(gè)標(biāo)識(shí)符會(huì)隨之傳遞。每個(gè)組件在處理請(qǐng)求時(shí)都會(huì)生成相關(guān)的追蹤數(shù)據(jù),例如開始時(shí)間、結(jié)束時(shí)間、執(zhí)行時(shí)間、調(diào)用的組件等。
這些追蹤數(shù)據(jù)被收集和匯總,通常存儲(chǔ)在專門的分布式追蹤系統(tǒng)中。開發(fā)人員可以使用這些數(shù)據(jù)來分析應(yīng)用程序的性能瓶頸、調(diào)用鏈路和錯(cuò)誤。通過可視化界面或查詢語言,他們可以查看整個(gè)請(qǐng)求的路徑和時(shí)間線,并識(shí)別潛在的性能問題和故障原因。
通常來講,在最為基本的層面上,追蹤解決方案從軟件可觀測(cè)性開始,通過從外部輸出推斷系統(tǒng)的內(nèi)部狀態(tài)。然而,由于這是一個(gè)相對(duì)不精確的過程,為了更準(zhǔn)確地讀取和記錄各個(gè)組件的情況,我們希望引入遙測(cè)技術(shù)來捕獲和測(cè)量數(shù)據(jù)。一旦系統(tǒng)具備遙測(cè)功能,我們就可以開始通過分布式追蹤來觀測(cè)系統(tǒng)級(jí)別發(fā)生的情況。
在云原生計(jì)算中,我們通常使用分布式系統(tǒng)和微服務(wù)架構(gòu),因此分布式追蹤成為日常調(diào)試和監(jiān)控的重要組成部分。它可以幫助我們理解請(qǐng)求是如何在多個(gè)服務(wù)之間流動(dòng)的,并提供關(guān)于性能、錯(cuò)誤和依賴關(guān)系的有用信息。通過分布式追蹤,我們可以更好地理解系統(tǒng)中的瓶頸、故障和性能問題,并采取適當(dāng)?shù)男袆?dòng)來改進(jìn)和優(yōu)化我們的應(yīng)用程序。
因此,分布式追蹤在軟件開發(fā)和運(yùn)維中具有重要意義,它提供了對(duì)分布式系統(tǒng)中請(qǐng)求流程和組件交互的全局視圖,幫助我們?cè)\斷問題、監(jiān)控性能并改進(jìn)系統(tǒng)的可靠性。
“Distributed Tracing - 分布式追蹤” 的歷史發(fā)展脈絡(luò)
Distributed Tracing(分布式追蹤)的發(fā)展歷史可以追溯到分布式系統(tǒng)和微服務(wù)架構(gòu)的出現(xiàn)。下面是分布式追蹤的一些關(guān)鍵里程碑和發(fā)展階段,具體可參考如下:
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è)計(jì)和實(shí)現(xiàn)為后來的分布式追蹤技術(shù)奠定了基礎(chǔ)。
在此篇論文中,Google 首次提出了分布式追蹤的概念,并探索了關(guān)鍵的技術(shù)和方法。其中包括請(qǐng)求追蹤,即追蹤一個(gè)請(qǐng)求在分布式系統(tǒng)中的整個(gè)路徑和生命周期。通過跨服務(wù)追蹤,Dapper 能夠追蹤一個(gè)請(qǐng)求在不同服務(wù)之間的傳遞和處理過程,從而提供全局的視圖和上下文。為了應(yīng)對(duì)大規(guī)模系統(tǒng)中的性能和存儲(chǔ)壓力,Dapper 引入了采樣技術(shù),僅記錄部分請(qǐng)求的追蹤數(shù)據(jù),而非全部。此外,Dapper 還提供了可視化工具,使開發(fā)人員能夠直觀地查看和分析追蹤數(shù)據(jù),以診斷和解決問題。
這篇論文的發(fā)表對(duì)于分布式系統(tǒng)的可觀察性和調(diào)試技術(shù)產(chǎn)生了深遠(yuǎn)的影響。它啟發(fā)了后續(xù)的研究和工具開發(fā),促進(jìn)了分布式追蹤技術(shù)的進(jìn)一步發(fā)展和應(yīng)用。許多開源項(xiàng)目和商業(yè)工具都受到 Dapper 的啟發(fā),并致力于提供更強(qiáng)大、靈活和易用的分布式追蹤解決方案。因此,Dapper 論文標(biāo)志著分布式追蹤領(lǐng)域的開端,為我們理解和管理復(fù)雜的分布式系統(tǒng)提供了重要的方法和工具。
2、Twitter Zipkin
Twitter 的 Zipkin 項(xiàng)目受到了 Google Dapper 論文的啟發(fā),并在其基礎(chǔ)上進(jìn)行了擴(kuò)展和改進(jìn)。Zipkin 提供了一種簡(jiǎn)單而強(qiáng)大的方式來收集、存儲(chǔ)和可視化分布式追蹤數(shù)據(jù)。通過引入 Zipkin,開發(fā)人員可以更輕松地實(shí)施分布式追蹤,從而獲得對(duì)系統(tǒng)中請(qǐng)求流程和服務(wù)交互的全局視圖。
Zipkin 采用了一些與 Google Dapper 類似的思想和技術(shù),例如請(qǐng)求追蹤和跨服務(wù)追蹤。它可以追蹤請(qǐng)求在分布式系統(tǒng)中的流動(dòng)路徑,并記錄每個(gè)服務(wù)的處理時(shí)間和相關(guān)信息。這使得開發(fā)人員能夠快速識(shí)別和排查潛在的性能瓶頸和故障點(diǎn)。
除了數(shù)據(jù)收集和存儲(chǔ)功能,Zipkin 還提供了直觀的可視化界面,使開發(fā)人員能夠直觀地查看和分析分布式追蹤數(shù)據(jù)。這些可視化工具可以幫助開發(fā)人員理解系統(tǒng)中的請(qǐng)求流程,識(shí)別慢速請(qǐng)求、異常情況和服務(wù)之間的依賴關(guān)系。
3、Uber Jaeger
在 Zipkin 發(fā)布三年后的 2015 年,Uber 宣布開源了 Jaeger,這是一個(gè)專門用于監(jiān)控、分析和排除微服務(wù)故障的分布式追蹤系統(tǒng)。
Jaeger 項(xiàng)目的推出為分布式追蹤技術(shù)帶來了新的突破和創(chuàng)新。它在基于 Zipkin 的思想和經(jīng)驗(yàn)的基礎(chǔ)上進(jìn)行了進(jìn)一步的改進(jìn)和優(yōu)化。Jaeger 提供了更高級(jí)別的功能和性能,以適應(yīng)大規(guī)模微服務(wù)架構(gòu)的需求。
隨著其開源項(xiàng)目的成功,Jaeger 于 2018 年成為云原生計(jì)算基金會(huì)(CNCF)的第 12 個(gè)托管項(xiàng)目。Jaeger 的加入進(jìn)一步加強(qiáng)了分布式追蹤技術(shù)在云原生生態(tài)系統(tǒng)中的地位,并得到了更廣泛的社區(qū)支持和貢獻(xiàn)。
由于其持續(xù)的發(fā)展和社區(qū)的努力,Jaeger 于 2019 年晉升為 CNCF 的畢業(yè)項(xiàng)目級(jí)別,這是 CNCF 下最高的可用級(jí)別。這表明 Jaeger 已經(jīng)成為一個(gè)成熟而可靠的分布式追蹤系統(tǒng),被廣泛認(rèn)可和采用。
4、OpenTracing
在 2016 年,CNCF(Cloud Native Computing Foundation)推出了 OpenTracing,這是一個(gè)旨在推動(dòng)分布式追蹤領(lǐng)域發(fā)展的開放標(biāo)準(zhǔn)。OpenTracing 的目標(biāo)是提供一套廠商中立的 API 和規(guī)范,以便在應(yīng)用程序中輕松集成各種分布式追蹤系統(tǒng)。
OpenTracing 的推出填補(bǔ)了分布式追蹤領(lǐng)域的一個(gè)重要空白。在此之前,不同的追蹤系統(tǒng)使用不同的 API 和數(shù)據(jù)格式,使得在不同系統(tǒng)之間切換和集成變得復(fù)雜困難。OpenTracing 的出現(xiàn)為開發(fā)人員提供了一種通用的編程接口,使得他們可以方便地在不同的追蹤系統(tǒng)之間切換和集成,而無需修改現(xiàn)有的代碼。
通過 OpenTracing,開發(fā)人員可以使用統(tǒng)一的 API 來定義和記錄跨多個(gè)服務(wù)的請(qǐng)求和操作。這些API可以輕松地插入到應(yīng)用程序的代碼中,以收集關(guān)鍵的追蹤信息。這些信息包括請(qǐng)求的流經(jīng)路徑、服務(wù)之間的依賴關(guān)系以及請(qǐng)求處理的時(shí)間等。
5、OpenCensus
除了 OpenTracing,Google 還推出了另一個(gè)項(xiàng)目名為 OpenCensus。OpenCensus 是一組適用于多種編程語言的庫,旨在幫助開發(fā)人員收集應(yīng)用程序的指標(biāo)和分布式追蹤數(shù)據(jù),并實(shí)時(shí)傳輸?shù)剿麄冞x擇的后端系統(tǒng)。這個(gè)項(xiàng)目的目標(biāo)是提供一種簡(jiǎn)單而強(qiáng)大的方式來監(jiān)控和診斷應(yīng)用程序的運(yùn)行狀況。
通過 OpenCensus,開發(fā)人員可以獲得對(duì)應(yīng)用程序的全面觀察,并獲得有關(guān)其性能、可用性和可靠性的關(guān)鍵洞察。收集和分析這些數(shù)據(jù)可以幫助開發(fā)人員優(yōu)化應(yīng)用程序的性能,提高用戶體驗(yàn),并及時(shí)發(fā)現(xiàn)和解決潛在的問題。
6、OpenTelemetry
在 2020 年,CNCF 支持了一個(gè)重要的項(xiàng)目,即 OpenTelemetry。OpenTelemetry 的目標(biāo)是將 OpenTracing 和 OpenCensus 項(xiàng)目合并,成為下一代分布式追蹤和觀測(cè)標(biāo)準(zhǔn)。它提供了一套全面的工具、庫和規(guī)范,用于收集、傳輸和分析應(yīng)用程序的追蹤數(shù)據(jù)和度量指標(biāo)。
OpenTelemetry 的出現(xiàn)是為了解決分布式追蹤和應(yīng)用程序觀測(cè)領(lǐng)域的挑戰(zhàn)。它整合了 OpenTracing 和 OpenCensus 的最佳實(shí)踐和思想,并提供了一個(gè)統(tǒng)一的解決方案。通過 OpenTelemetry,開發(fā)人員可以方便地收集應(yīng)用程序的追蹤數(shù)據(jù)和度量指標(biāo),無論是在單個(gè)服務(wù)內(nèi)部還是跨多個(gè)服務(wù)之間。
OpenTelemetry 提供了一系列的 API 和 SDK,支持多種編程語言和平臺(tái)。開發(fā)人員可以使用這些工具將追蹤和度量的收集嵌入到應(yīng)用程序代碼中。這些工具會(huì)自動(dòng)收集關(guān)鍵的數(shù)據(jù),例如請(qǐng)求處理時(shí)間、資源利用率和錯(cuò)誤率等。同時(shí),OpenTelemetry 還支持分布式追蹤,能夠追蹤請(qǐng)求在整個(gè)分布式系統(tǒng)中的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系。
OpenTelemetry 的設(shè)計(jì)具有靈活性和可擴(kuò)展性。它支持與多個(gè)后端系統(tǒng)集成,例如 Jaeger、Zipkin、Prometheus 和 Google Cloud Monitoring 等。開發(fā)人員可以根據(jù)自己的需求選擇適合的后端,并將收集到的數(shù)據(jù)實(shí)時(shí)傳輸?shù)竭@些后端系統(tǒng)中進(jìn)行分析和可視化。這使得開發(fā)人員能夠獲得對(duì)應(yīng)用程序的全面觀察,并及時(shí)識(shí)別和解決潛在的性能問題和故障。
通過 OpenTelemetry,開發(fā)人員可以更加方便地實(shí)現(xiàn)應(yīng)用程序的監(jiān)控和觀測(cè)。它提供了一種統(tǒng)一的標(biāo)準(zhǔn)和工具,使得跨多個(gè)服務(wù)的追蹤和度量變得更加一致和可靠。開發(fā)人員可以利用 OpenTelemetry 的功能來優(yōu)化應(yīng)用程序的性能、可用性和可靠性,提供更好的用戶體驗(yàn)。
為什么需要 “Distributed Tracing - 分布式追蹤” ?
分布式追蹤是在分布式系統(tǒng)中追蹤和監(jiān)控請(qǐng)求的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系的過程。在現(xiàn)代的應(yīng)用程序架構(gòu)中,分布式系統(tǒng)變得越來越常見。這些系統(tǒng)通常由多個(gè)微服務(wù)組成,每個(gè)微服務(wù)負(fù)責(zé)處理特定的功能或業(yè)務(wù)邏輯。在這樣的環(huán)境下,分布式追蹤變得至關(guān)重要,原因如下:
- 故障排查和調(diào)試:在分布式系統(tǒng)中,當(dāng)出現(xiàn)故障或性能問題時(shí),很難確定問題的根源。分布式追蹤可以幫助開發(fā)人員識(shí)別請(qǐng)求的流經(jīng)路徑,并記錄每個(gè)服務(wù)的處理時(shí)間和性能指標(biāo)。這樣,開發(fā)人員可以快速定位問題所在,并進(jìn)行故障排查和調(diào)試。
- 性能優(yōu)化:分布式追蹤可以提供對(duì)系統(tǒng)性能的全面可見性。通過收集和分析請(qǐng)求的流經(jīng)路徑和服務(wù)之間的調(diào)用關(guān)系,開發(fā)人員可以了解每個(gè)服務(wù)的性能瓶頸和熱點(diǎn)。這使得他們能夠有針對(duì)性地優(yōu)化系統(tǒng),提高整體性能和響應(yīng)時(shí)間。
- 容量規(guī)劃和資源管理:分布式追蹤可以提供對(duì)資源利用率的洞察。通過監(jiān)視請(qǐng)求的流經(jīng)路徑和服務(wù)的調(diào)用關(guān)系,開發(fā)人員可以了解每個(gè)服務(wù)的負(fù)載情況和資源消耗。這有助于進(jìn)行容量規(guī)劃和資源管理,確保系統(tǒng)具有足夠的資源來滿足用戶需求。
- 跨服務(wù)的請(qǐng)求追蹤:在分布式系統(tǒng)中,一個(gè)請(qǐng)求通常會(huì)涉及多個(gè)服務(wù)的協(xié)作。分布式追蹤可以追蹤請(qǐng)求在整個(gè)系統(tǒng)中的流經(jīng)路徑,并記錄每個(gè)服務(wù)的處理情況。這有助于了解服務(wù)之間的依賴關(guān)系和調(diào)用關(guān)系,提供全局的請(qǐng)求視圖,從而更好地理解系統(tǒng)的行為和性能。
- 監(jiān)控和警報(bào):分布式追蹤可以與監(jiān)控和警報(bào)系統(tǒng)集成,提供對(duì)系統(tǒng)運(yùn)行狀況的實(shí)時(shí)監(jiān)控。通過收集和分析請(qǐng)求的追蹤數(shù)據(jù),可以生成關(guān)鍵的度量指標(biāo)和報(bào)告,用于監(jiān)控系統(tǒng)的健康狀況和性能指標(biāo)。同時(shí),可以設(shè)置警報(bào)規(guī)則,及時(shí)發(fā)現(xiàn)并響應(yīng)系統(tǒng)中的異常情況。
總之,分布式追蹤在現(xiàn)代分布式系統(tǒng)中起著至關(guān)重要的作用。它幫助開發(fā)人員進(jìn)行故障排查、性能優(yōu)化、容量規(guī)劃和資源管理。此外,它還提供了對(duì)跨服務(wù)請(qǐng)求的全局視圖,以及與監(jiān)控和警報(bào)系統(tǒng)的集成,實(shí)現(xiàn)對(duì)系統(tǒng)的實(shí)時(shí)監(jiān)控和警報(bào)。通過分布式追蹤,開發(fā)人員可以更好地理解和管理復(fù)雜的分布式系統(tǒng),提供高性能、可靠和可伸縮的應(yīng)用程序。