一文讀懂分布式追蹤:過去、現(xiàn)在和未來
作為可觀測性體系之一的分布式追蹤一直是一個備受爭議的話題。作為過去每屆 全球知名大會 KubeCon 以及國內(nèi)各種技術(shù)峰會所扯的老牌技術(shù),曾一度被寄予厚望,被認為會徹底改變系統(tǒng)觀測認知。然而,五年已經(jīng)過去了。。。
一、什么是 Distributed Ttracing ?
通常來講,分布式跟蹤是一種在分布式系統(tǒng)和微服務(wù)中傳播的請求,生成有關(guān)這些請求的高質(zhì)量數(shù)據(jù),并使其可供分析的方法。
分布式追蹤(Distributed Tracing)是一種用于監(jiān)測分布式系統(tǒng)中請求流程的技術(shù)。它可以追蹤一個請求在不同的微服務(wù)中的執(zhí)行情況,并將這些信息整合到一個完整的請求鏈路圖中,以便于監(jiān)測和調(diào)試。分布式追蹤通常通過在請求的不同階段插入唯一的標識符(例如 Trace ID 和 Span ID 等)來實現(xiàn)。這些標識符隨著請求的傳遞,會在不同的微服務(wù)之間傳遞,用于標記請求的不同階段,從而構(gòu)建完整的請求鏈路圖。
分布式跟蹤對于監(jiān)控、調(diào)試和優(yōu)化分布式軟件架構(gòu)至關(guān)重要,特別是在動態(tài)微服務(wù)架構(gòu)中,因為它有助于團隊更快地了解每個微服務(wù)的性能。
二、分布式追蹤的工作原理
分布式跟蹤的工作原理是跟蹤通過分布式系統(tǒng)的請求流,并在請求通過各種服務(wù)和組件時收集有關(guān)請求每個步驟的數(shù)據(jù)。 然后,該數(shù)據(jù)用于構(gòu)建請求過程(從初始請求到最終響應(yīng))的完整畫面。
為了實現(xiàn)這一點,分布式跟蹤通常依賴于使用唯一標識符,例如跟蹤 ID 和跨度 ID,這些標識符附加到每個請求,并在請求遍歷不同服務(wù)時通過系統(tǒng)傳遞。 這些標識符允許跟蹤系統(tǒng)將請求的每個步驟與整個請求鏈關(guān)聯(lián)起來,即使它通過不同的服務(wù)和組件也是如此。
在典型的分布式跟蹤系統(tǒng)中,通常由三個主要組件組成:追蹤代理(Tracing Agent)、追蹤收集器(Tracing Collector)和追蹤存儲(Tracing Storage)三個主要組件協(xié)同工作來跟蹤請求
1、追蹤代理
作為在分布式系統(tǒng)中的每個服務(wù)或組件上運行的軟件組件,追蹤代理主要負責(zé)收集有關(guān)通過它們的請求的數(shù)據(jù)。 追蹤代理通常將跟蹤和跨度 ID 添加到請求標頭,并將此信息發(fā)送到追蹤收集器。
2、追蹤收集器
追蹤收集器組件從跟蹤代理接收追蹤數(shù)據(jù)并將其聚合成完整的請求跟蹤,然后負責(zé)關(guān)聯(lián)不同服務(wù)和組件之間的追蹤和跨度 ID,以構(gòu)建請求旅程的完整畫面。
3、追蹤存儲
追蹤存儲組件為存儲追蹤數(shù)據(jù)以供以后檢索和分析的組件,主要用于診斷問題、優(yōu)化性能并深入了解分布式系統(tǒng)的整體行為。
三、為什么我們的系統(tǒng)需要分布式追蹤?
分布式追蹤在實際業(yè)務(wù)場景中通常是獨一無二的,因為它專注于請求作為可觀察性的單元。在監(jiān)控和度量平臺中,通常以組件(如服務(wù)和主機)作為被觀察的基本單位。這些平臺可以提供有關(guān)整個組件隨時間的行為的信息,例如在特定時間范圍內(nèi)該服務(wù)的健康狀況、吞吐量和錯誤率。
相比之下,日志的被觀察單位是事件。例如,當(dāng)代碼執(zhí)行期間出現(xiàn)事件時,可以打印一些信息。這些事件是開發(fā)人員在編寫代碼時主觀定義的。然而,日志的挑戰(zhàn)在于它們通常是脫節(jié)的,每個組件都單獨打印自己的日志消息,沒有簡單的方法將它們連接在一起,以便形成有意義的整體視圖。
相對地,分布式追蹤的被觀察單位是單個請求,因為它在多個組件之間遍歷。這使得我們能夠?qū)φ麄€分布式系統(tǒng)進行查詢,并了解在一個復(fù)雜、互聯(lián)的系統(tǒng)中發(fā)生了什么。這種可觀察性的單元使分布式追蹤成為了一種強大的工具,可以幫助開發(fā)人員快速診斷問題、優(yōu)化性能和改進可維護性。
通常而言,借助分布式追蹤,我們能夠?qū)崿F(xiàn):
1、快速診斷
分布式應(yīng)用程序通常由多個服務(wù)和組件組成,當(dāng)出現(xiàn)問題時,需要快速定位問題所在,并診斷問題的根本原因。分布式追蹤可以幫助開發(fā)人員快速診斷問題,因為它提供了詳細的請求鏈路信息,可以直接指出問題所在。
2、改進可維護性
分布式追蹤可以提供應(yīng)用程序的全面視圖,包括不同服務(wù)和組件之間的相互作用。這有助于開發(fā)人員更好地理解應(yīng)用程序的結(jié)構(gòu)和功能,并改進其可維護性。
3、理解系統(tǒng)
現(xiàn)代應(yīng)用程序通常由多個服務(wù)和組件組成,這些服務(wù)和組件之間的相互作用非常復(fù)雜。分布式追蹤可以提供完整的請求鏈路信息,并幫助開發(fā)人員了解系統(tǒng)中不同組件之間的相互作用,從而更好地理解系統(tǒng)的行為和性能。
一句話總結(jié):
“分布式跟蹤的基本情況在于,圍繞請求的這種方向最接近最終用戶的體驗。因此,對于我們?nèi)绾螜z查和排除分布式架構(gòu)的故障來說,這也是最直觀的。”
四、今天,分布式追蹤所面臨的問題?
在實際的業(yè)務(wù)場景中,分布式追蹤在企業(yè)的落地及應(yīng)用往往因為各種各樣的因素導(dǎo)致面臨各種問題,具體如下:
1、實施艱難
實施分布式追蹤可能會面臨一些挑戰(zhàn)。為了實現(xiàn)分布式追蹤,我們需要對代碼進行修改和發(fā)布。雖然代碼修改是實現(xiàn)可觀察性的共同要求,但是分布式追蹤的挑戰(zhàn)在于,為了獲得分布式追蹤,每個服務(wù)或組件都需要進行工具化,否則跟蹤將中斷。
這意味著在實施分布式追蹤之前,我們需要對每個服務(wù)或組件進行儀器化,以便收集有關(guān)請求的跟蹤信息,并將其傳遞給追蹤系統(tǒng)。這可能需要一些額外的工作,包括修改現(xiàn)有代碼、添加新的跟蹤代碼和重新部署應(yīng)用程序。此外,由于每個服務(wù)或組件都需要進行儀器化,這可能會導(dǎo)致一些復(fù)雜性和維護成本的增加
2、價值削弱
盡管分布式跟蹤在分布式系統(tǒng)中的可觀察性和問題排查方面有很大的優(yōu)勢,但在某些情況下,分布式跟蹤的價值可能會被削弱,最大的障礙在于高昂的成本。實施分布式跟蹤需要對每個服務(wù)和組件進行工具化,這可能會導(dǎo)致額外的成本和復(fù)雜性。如果在實施分布式跟蹤之前沒有考慮好成本和收益,那么分布式跟蹤的價值可能會被削弱
第二個在于團隊的技術(shù)儲備,團隊的技術(shù)儲備對實施分布式追蹤的影響是十分重要的。實施分布式追蹤需要對分布式系統(tǒng)進行儀器化,以便收集請求的跟蹤信息,并將其傳遞給追蹤系統(tǒng)。這需要對現(xiàn)有代碼進行修改,并添加新的跟蹤代碼,并且需要在不影響系統(tǒng)功能的情況下進行部署。如果團隊缺乏實施分布式追蹤所需的技術(shù)儲備,那么實施分布式追蹤可能會變得困難。
3、復(fù)雜的抽樣決策
在實施分布式追蹤時,抽樣決策是一個重要的考慮因素。由于分布式追蹤會產(chǎn)生大量的跟蹤數(shù)據(jù),因此需要采用抽樣技術(shù)來減少數(shù)據(jù)量,以避免存儲和處理方面的問題。但是,抽樣決策的復(fù)雜性會影響實施分布式追蹤的效果,主要涉及抽樣決策的準確性、復(fù)雜性以及一致性。
抽樣決策的準確性直接影響到跟蹤數(shù)據(jù)的質(zhì)量。如果抽樣決策過于簡單或不準確,那么可能會忽略重要的請求路徑,導(dǎo)致無法正確診斷問題。
抽樣決策的復(fù)雜性也會影響到實施分布式追蹤的效果。如果抽樣決策過于復(fù)雜,那么可能會增加實施分布式追蹤的難度,導(dǎo)致實施時間和成本的增加。
在分布式系統(tǒng)中,不同服務(wù)和組件可能會使用不同的抽樣策略,這可能會導(dǎo)致跟蹤數(shù)據(jù)的不一致性。如果不同組件使用不同的抽樣策略,那么可能會導(dǎo)致跟蹤數(shù)據(jù)的缺失或重疊,從而影響跟蹤數(shù)據(jù)的質(zhì)量。
當(dāng)然,除了上面核心的因素外,還有其他可觀因素,此處咱不贅述。
五、未來,分布式追蹤如何發(fā)力?
隨著分布式系統(tǒng)的普及和應(yīng)用場景的增多,分布式追蹤的未來發(fā)展前景非常廣闊。分布式追蹤將成為分布式系統(tǒng)可觀測性的核心工具之一,并且將在以下方面發(fā)揮更大的作用:
1、自動化:隨著人工智能和機器學(xué)習(xí)技術(shù)的發(fā)展,分布式追蹤將越來越自動化。例如,可以使用機器學(xué)習(xí)來自動識別異常行為和性能問題,并提供自動化的問題排查和修復(fù)建議。
2、效率:分布式追蹤將成為分布式系統(tǒng)管理的重要工具之一。通過對系統(tǒng)的全面監(jiān)控和診斷,分布式追蹤能夠提高系統(tǒng)的效率和穩(wěn)定性,并減少故障排查的時間和成本。
3、安全:分布式追蹤將成為安全領(lǐng)域的重要工具之一。通過監(jiān)控和分析請求的路徑和數(shù)據(jù)流,分布式追蹤能夠識別潛在的安全漏洞和攻擊,并提供及時的響應(yīng)和修復(fù)建議。
4、標準化:分布式追蹤將越來越標準化,以便不同供應(yīng)商和廠商的系統(tǒng)可以無縫地集成和互操作。例如,OpenTelemetry 就是一個流行的開放標準,用于實現(xiàn)分布式追蹤和度量。
總之,分布式追蹤的未來發(fā)展前景非常廣闊。隨著技術(shù)的進步和需求的增長,分布式追蹤將成為分布式系統(tǒng)可觀察性的核心工具之一,并在自動化、效率、安全和標準化等方面發(fā)揮更大的作用。