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