鯨品堂|撥開迷霧:利用全鏈路消息跟蹤揭示系統奧秘

2023-08-07 942

在分布式系統,一次外部請求往往需要內部多個模塊,多個中間件,多臺機器的相互調用才能完成。在這一系列的調用中,可能有些是串行的,而有些是并行的,排查定位非常困難。


全鏈路消息分析及全鏈路消息跟蹤可以幫助我們解決這個問題?;谌溌废⒎治隹梢酝ㄟ^跟蹤消息的完整傳遞路徑,精確定位故障發生的位置和原因,縮小故障范圍,并提高故障排查和調試的效率。全鏈路消息跟蹤可以追蹤和監控微服務之間的消息傳遞路徑,為項目團隊提供服務器節點定位、異常上下文信息收集、服務健康度監控/預警、關鍵業務邏輯執行過程追溯、業務過程分析、業務環節耗時跟蹤預警等便捷的運維手段。


那什么是全鏈路消息跟蹤?


PART.1

揭開全鏈路消息跟蹤的神秘面紗


全鏈路消息(End-to-End Message),是指在某種業務在一套分布式系統中從發送方到接收方完整傳遞的、能描述業務全生命周期的消息。它包括了業務在系統中各環節的傳遞路徑、消息內容和相關的上下文信息。全鏈路消息包含但不限于以下消息范圍:


圖片關鍵詞圖片關鍵詞


消息主要涵蓋以下內容:


消息傳遞路徑:全鏈路消息跟蹤記錄消息從發送端到接收端的傳遞路徑,包括經過的各個服務、組件和節點。



消息狀態和處理情況:全鏈路消息跟蹤記錄每個節點對消息的處理情況,包括成功、失敗、異常等狀態,以及處理過程中的關鍵信息和時間戳。



上下文信息:全鏈路消息跟蹤不僅追蹤消息本身,還記錄與消息相關的上下文信息,如請求參數、響應結果、異常信息等。


為了能夠更好地管理和分析全鏈路消息的傳遞路徑和狀態,提供全面的消息監控和分析能力,以便于故障排查、性能優化和系統調試。


抽象鏈路消息主要包括:


定義消息模型:通過定義消息的結構和屬性,將消息抽象成一種可管理和分析的數據模型,使其具備可擴展性和靈活性。目前我們定義的大致有唯一標識、請求消息、響應消息、異常消息、應用節點信息(IP、端口、模塊名稱)、消息類型、業務類型和業務標識等信息,便于業務異常、系統異常的排查。



唯一標識消息:為每個消息生成唯一標識符,以便跟蹤和關聯消息在系統中的傳遞和處理。



標準化消息格式:制定一致的消息格式和協議,使不同組件和服務之間能夠理解和解析消息,實現消息的抽象和互操作。


全鏈路消息跟蹤(End-to-End Message Tracing)的目的就是記錄和追蹤這些消息在系統中的傳遞過程,以便實現對整個消息傳遞鏈路的可視化、監測和分析。


在一個完整的業務操作通常涉及多個服務之間的協作和消息傳遞,全鏈路消息可以跨越多個服務、中間件等組件,從發送方經過一系列中間節點,最終到達接收方。通過追蹤全鏈路消息,可以了解消息在系統中的流動和處理過程,包括消息的發送時間、傳遞路徑、中間節點的處理時間等信息。


圖片關鍵詞


外部系統進入到系統的時候,通常的日志記錄只會到接口層面,即請求前后的出入參以及對應的耗時等。但是在全鏈路消息跟蹤的設計模式下,接口請求的信息只是其中的一部分,還需要記錄接口開始后到結束的中間的業務邏輯的消息,當然這個取決于各業務系統的顆粒度。


PART.2

實施全鏈路消息跟蹤的四步驟




步驟一:數據鏈路分析


  • 確定數據源

首先需要明確業務系統中的數據源,包括輸入數據的來源和輸出數據的目的地。這可以包括數據庫、API接口、消息隊列、日志文件等。


  • 識別數據鏈路

根據業務系統的功能和數據流動情況,識別數據鏈路的各個環節和組件。這可以通過分析業務流程、系統架構圖以及相關文檔來進行。


  • 定義數據鏈路

為每個數據鏈路環節定義清晰的輸入和輸出數據,以及數據的轉換和處理過程。明確每個環節之間的數據傳遞方式和規則。


  • 追蹤數據流

通過合適的手段和工具,追蹤業務系統中的數據流動??梢允褂萌罩居涗?、消息隊列監控、數據庫查詢等方式來獲取數據流的詳細信息。


  • 數據鏈路分析

基于追蹤到的數據流信息,進行數據鏈路分析。這包括確定數據鏈路中的瓶頸、延遲、錯誤和數據丟失等問題。通過分析數據鏈路,可以找出導致問題的環節,并提供相應的優化和改進建議。




步驟二:數據流解析


在全鏈路消息跟蹤中,數據流的跟蹤和解析是一個關鍵步驟,數據流的跟蹤通常通過在系統中埋點或攔截關鍵節點的方式實現。當消息經過這些節點時,會記錄相關的信息,如消息的內容、時間戳、發送者和接收者等。這些信息可以被捕獲和存儲,用于后續的分析和追蹤。


目前我們設計模式中有三種方式來進行鏈路數據的跟蹤。


  • 基于日志的實現方法


基于日志的實現方法是消息全鏈路跟蹤的一種常見方式。它通過在每個服務或組件中記錄相關的日志信息來實現消息的跟蹤和監控。下面是基于日志的實現方法的流程:

圖片關鍵詞圖片關鍵詞


基于日志的實現方法相對簡單且易于擴展,因為它借助于已經存在的日志記錄機制和工具。然而,它也存在一些限制,如日志量的增加、日志傳遞的開銷和跨服務邊界的上下文傳遞等挑戰。因此,在實際應用中,通常需要結合其他技術和方法,如注入式跟蹤和集成式跟蹤系統,來實現更全面和高效的消息全鏈路跟蹤。


  • 基于注入的實現方法


基于注入的實現方法是消息全鏈路跟蹤的另一種常見方式。它通過在消息傳遞路徑上的每個服務或組件中插入代碼來實現消息的跟蹤和監控。下面是基于注入的實現方法的流程:


圖片關鍵詞


基于注入的實現方法具有較高的靈活性和精確度,因為它可以直接在代碼中插入跟蹤邏輯。然而,它也需要在每個服務或組件中進行修改和注入代碼,對現有代碼的侵入性較大。此外,注入的實現方法可能需要更多的開發工作和技術支持,以確保正確的跟蹤邏輯和數據收集。


  • 基于AOP(面向切面編程)的實現方法


從前面兩種實現方式來看,對于現有系統代碼的侵入性相對都比較強,對于已經運營的生產系統來說不是最友好的方式,且定制化高,不易于擴展和維護。因此,就有了第三種實現方法——基于AOP的實現消息記錄。


AOP通過將橫切的信息收集點從業務邏輯中抽象出來,使得信息收集點的實現可以集中在一個地方,提高了代碼的模塊化和可維護性,減少代碼冗余。其次,AOP使得信息收集點的配置和管理更加集中化,可以更方便地管理和修改信息收集點的實現。


基于AOP的實現方法,當然也有它特有的實現步驟:


圖片關鍵詞


通過基于AOP的實現方法,可以在關鍵的方法調用或消息傳遞上插入跟蹤邏輯,實現消息全鏈路跟蹤。這種方法具有較強的靈活性和可擴展性,可以適用于分布式系統。




步驟三:數據存儲


在實現全鏈路消息跟蹤時,存儲和索引跟蹤數據是關鍵的一步。存儲和索引跟蹤數據可以幫助實現對消息的快速檢索、分析和查詢,從而支持故障排查、性能優化和系統監控等任務。以下是采用的數據存儲方式:



數據庫存儲:每個消息可以作為一個記錄,包含相關的字段(例如鏈路追蹤標識符、時間戳、消息唯一標識、傳遞路徑等)。使用數據庫的查詢功能可以對跟蹤數據進行靈活的檢索和分析。



搜索引擎跟蹤:為了支持快速的數據檢索和查詢,以及報文數據的模糊搜索,可以使用搜索引擎支持復雜數據的查詢。我們使用Elasticsearch作為消息詳細信息的存儲引擎,和數據庫存儲結合,通過建立索引來加速對跟蹤數據的查詢。索引可以基于消息的關鍵字段(如鏈路追蹤標識符、時間戳)進行構建,以便快速地定位和訪問跟蹤數據。


數據存儲除了中間件的選型,還需要將數據存儲的過程和業務系統做成解耦,避免降低業務系統正常功能的性能情況。


下圖是存儲數據的過程:

圖片關鍵詞


首先通過埋點采集到數據后,可以將消息以【索引+全量的消息數據】的結構序列化存儲到Redis緩存中;



第二步同步把重要索引類信息封裝成消息體投入到消息隊列中;



然后在消息存儲應用中消費消息隊列的消息,根據消息中的索引從Redis中獲取實際的數據,寫入到數據庫以及Elastic Search中,完成鏈路消息的持久化。




步驟四:數據可視化


可視化跟蹤數據是實現全鏈路消息跟蹤的關鍵一步,它可以幫助開發人員和運維人員更直觀地理解和分析消息傳遞的流程和性能。



跟蹤數據流程圖:使用流程圖工具(如Graphviz、Mermaid、AntV G6)可以繪制跟蹤數據的流程圖,展示消息在系統中的傳遞路徑和中間節點的處理過程。



時間軸和日志視圖:通過在時間軸上展示跟蹤數據的時間戳和事件順序,可以更清晰地了解消息的傳遞順序和時間間隔。日志視圖可以展示每個消息的詳細信息,包括消息內容、上下文和處理日志等。



拓撲圖和依賴關系圖:使用拓撲圖工具(如D3.js、Neo4j)可以繪制跟蹤數據的拓撲圖,展示服務之間的關系和依賴。


官方微信公眾號

浩鯨云計算科技股份有限公司 版權所有 2003-2023

蘇ICP備10224443號-6       蘇公網安備 32011402011374號

亚洲精品免费视频_热99re6久精品国产首页青柠_精品国产专区91在线_亚洲美洲欧洲偷拍片区