鯨品堂|撥開迷(mí)霧:利(lì)用全(quán)鏈路消息跟蹤揭示係統奧秘

2023-08-07 942

在分布式係統,一次外部請求往往需要內部多個模塊,多(duō)個中間件,多台機器的相互調用(yòng)才能完(wán)成。在這一係列的調用中,可能有些是串行的,而有些是並行的,排查定位非常(cháng)困難(nán)。


全鏈路消息分析及全鏈路消息跟蹤可以幫助我們解決這個(gè)問題。基於全鏈路消息分析可以通過跟蹤消息的完整傳遞路(lù)徑,精確定位故障發生的位置和原因,縮小故障範圍,並提高故障排查和調試的效率(lǜ)。全鏈路消息跟蹤可以追蹤和監控微服務之間的消息傳遞路徑,為項目團(tuán)隊提供服務(wù)器節點定位、異常上下文信息收集、服務健康度監控/預(yù)警、關鍵業務邏輯執行過程追溯、業務過程(chéng)分析、業務環節耗時跟蹤預警(jǐng)等便捷的運維手段。


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


PART.1

揭開全鏈路消(xiāo)息(xī)跟蹤的神秘麵紗


全(quán)鏈路消息(End-to-End Message),是指在某種業務在一(yī)套分布式係統中從發送方到接收方完整傳遞的、能描述業務全生命(mìng)周期的(de)消息。它包括了業務在係統(tǒng)中(zhōng)各環節的傳遞路徑、消息內容和(hé)相關的上下文信息。全鏈路消息包含但不限於以下消息範圍:


圖片關鍵詞圖片關(guān)鍵詞


消息主要涵蓋以下(xià)內容:


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



消息狀態和(hé)處(chù)理情況:全鏈路消(xiāo)息(xī)跟(gēn)蹤記(jì)錄每個節點對消息的處理情況,包括成功、失敗、異常(cháng)等狀態,以及處理過(guò)程中的關鍵信息和時間戳。



上下文信息:全鏈路消息跟蹤不(bú)僅追蹤消息本身,還記錄與消息相關(guān)的(de)上下文信息,如請求參數、響應(yīng)結果、異常信息等。


為了能夠更好地管理和分析全鏈路消息的傳遞路徑和(hé)狀態,提供(gòng)全(quán)麵的消息(xī)監控和分析能力,以便於故障排查(chá)、性能優化和(hé)係統調試。


抽象鏈路消息主要包括(kuò):


定義消息模型:通(tōng)過(guò)定義消息的(de)結構和屬性(xìng),將消息抽象成一種(zhǒng)可管理和分析的數據模(mó)型,使其具備可擴展性和靈活性。目前我們定義的大致有唯一標識、請求消息、響應消息、異(yì)常消息、應用節點信息(IP、端口、模塊名稱)、消息類型、業務類型和業務標識等信息,便於業務(wù)異常、係統異常的排查。



唯(wéi)一標(biāo)識消息:為每個消息生成唯一標(biāo)識符(fú),以便跟蹤和關(guān)聯消息在係統中的傳遞和(hé)處理。



標準化消息格式:製定一致的消息格式和協議,使不同組(zǔ)件和服務之間能夠(gòu)理解和解(jiě)析消息,實現消息的抽象和(hé)互操作。


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


在一個完整的(de)業務操作通常涉及多個服務之間的協作和消息傳(chuán)遞,全鏈路消息可以跨越多個服務、中間件等組件,從發(fā)送方經過(guò)一係列中間節點,最終到達接收方。通過追蹤全鏈路消息,可以了解消息(xī)在係統中的流動(dòng)和處理(lǐ)過程(chéng),包(bāo)括消息的發送時間、傳遞路徑、中間節點(diǎn)的處理(lǐ)時間等信息。


圖片關鍵(jiàn)詞


外部係統進入到係統的時候,通常的日誌記錄(lù)隻會(huì)到接(jiē)口層麵,即請(qǐng)求前後的出入參(cān)以(yǐ)及對應(yīng)的耗時等。但是在全鏈路消息跟蹤的設計(jì)模式下,接口(kǒu)請求的信息隻是其中的一部分,還需要記錄接口開始後到結束的中間的業務邏輯的消息,當然(rán)這個取決於各業務係統的顆粒度。


PART.2

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




步驟(zhòu)一:數據鏈路分析


  • 確定數據源

首先需要明確業務係統中(zhōng)的數據源,包括輸入數(shù)據的來源和輸出數據的目的(de)地。這可以包括數據庫、API接口、消息隊列、日誌文件等(děng)。


  • 識別數據鏈路(lù)

根據業務係統的功(gōng)能和數據流動情況,識別數據鏈路(lù)的各(gè)個環節和組件。這可以(yǐ)通過分析業務流程、係統架構圖以及相關文檔來進行(háng)。


  • 定義數據鏈路

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


  • 追蹤數據流

通過(guò)合適的手段和工(gōng)具,追蹤(zōng)業務係統中的數據流(liú)動。可(kě)以使用日誌記錄、消息隊列監控、數據庫(kù)查詢等(děng)方式來獲取數據流的詳細信息。


  • 數據鏈路分析

基於追蹤到的數據流信息,進(jìn)行數據鏈路分析。這包括確定數據(jù)鏈路中的瓶頸、延遲、錯(cuò)誤和數據丟失等問題。通(tōng)過分析數據鏈(liàn)路,可以找出導(dǎo)致問題(tí)的環節,並提供(gòng)相應的優化和改進建議。




步驟二(èr):數據流解(jiě)析


在全鏈路消(xiāo)息跟蹤中,數據流的跟蹤和解(jiě)析是一個關鍵步驟,數據(jù)流的跟蹤通常通過在(zài)係統中埋點或攔截(jié)關鍵節點的方式實現。當消息經過這(zhè)些節點(diǎn)時,會(huì)記錄相關的信息,如消息的內容、時間戳、發送者和接收者等。這些信息可(kě)以被捕獲和存儲,用於後續的分析和追蹤。


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


  • 基於日誌的實現(xiàn)方法


基於日誌的實現方法是消息全鏈路跟蹤的一種常見方式。它通過在每個服(fú)務(wù)或組件中記錄相關的日誌信息(xī)來實現消息的跟(gēn)蹤和監控。下麵是基於(yú)日誌的實現方法的(de)流(liú)程:

圖片關鍵詞圖片關鍵詞


基於日誌的實現方法相對簡單且易於擴展(zhǎn),因為它借助於(yú)已經存在的日誌記錄機製和工具。然(rán)而,它也存在一些限製,如(rú)日誌量的增加、日誌傳遞的開銷和跨服務邊界的上下文傳遞等挑戰。因此,在實際應用中,通常需要結合其他技術和方法,如注入式跟蹤和集成式跟(gēn)蹤(zōng)係統,來(lái)實現更全麵和(hé)高效(xiào)的(de)消息全鏈路(lù)跟蹤。


  • 基於注入的實現方法(fǎ)


基於注入(rù)的實現(xiàn)方法是消(xiāo)息全鏈(liàn)路(lù)跟蹤(zōng)的另一種常見方式。它通過在消息(xī)傳遞路徑上(shàng)的每個服務或組件中插入代碼(mǎ)來實(shí)現消息的跟蹤和監控。下麵是(shì)基於注入的實現方法的流程:


圖片關鍵(jiàn)詞


基(jī)於注(zhù)入的實現方法具有較高的靈活(huó)性(xìng)和精確度(dù),因為它可以直接在代碼中插入跟蹤邏輯。然(rán)而,它也需要在每個服務或組件(jiàn)中(zhōng)進行修改和注入代碼,對現有代碼的侵入性較大。此外,注入的(de)實現方法可能需要更(gèng)多的開發工作和技術支持,以確保正確(què)的跟蹤邏輯和(hé)數據收集。


  • 基(jī)於AOP(麵向切麵編程)的實現方法


從前麵兩種實現方式來看,對於現有係統代碼的侵入性相對都比較強,對於已(yǐ)經運營的生(shēng)產係(xì)統來說不是最友好的方式,且定(dìng)製化高(gāo),不易於擴展和維護。因此,就有了第三種實現方法(fǎ)——基於AOP的(de)實現消(xiāo)息記錄。


AOP通過將橫切的信息收集點從業務邏輯中抽象出來,使得信息收集點的實(shí)現可以(yǐ)集中在一個地方,提(tí)高(gāo)了代(dài)碼的模塊(kuài)化和(hé)可維護性,減少代碼冗餘(yú)。其次,AOP使得信息收集點的配置和管理更加集中化,可以更方便地管理和修改(gǎi)信息(xī)收(shōu)集(jí)點(diǎn)的實現。


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


圖片關鍵詞


通過基於AOP的實(shí)現方法,可以在關鍵的方法調用或消息傳遞上插入(rù)跟蹤邏(luó)輯,實現消息全鏈路跟蹤。這種方法具有較強的靈(líng)活性(xìng)和可擴(kuò)展性,可以適用於分布式係統。




步(bù)驟(zhòu)三:數據存儲


在實現(xiàn)全鏈路(lù)消息跟蹤時,存儲和索引跟蹤數(shù)據是關鍵的一步。存(cún)儲(chǔ)和索引跟蹤數據可以(yǐ)幫助實(shí)現對消息的快速檢索、分析和查詢,從(cóng)而支持故障排查、性能優化和係統監控等(děng)任務。以(yǐ)下是采用的數據存儲方式:



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



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


數據存儲除了中間件的選型,還需要將數據存儲的過程(chéng)和(hé)業務係(xì)統做成解耦,避(bì)免降低業務係統正常功能(néng)的性能情況(kuàng)。


下圖是存儲數據的過(guò)程:

圖片關(guān)鍵(jiàn)詞


首先通過埋點采(cǎi)集到數據(jù)後,可以(yǐ)將消息以【索引+全量的消(xiāo)息數據】的結構序列化存儲到Redis緩存中;



第二步同步(bù)把重要(yào)索(suǒ)引類信(xìn)息封裝成消息體投(tóu)入到消息隊列中;



然後在消息存儲應用中消費消息隊列的消息,根(gēn)據消息中的索引從Redis中獲取實(shí)際的數(shù)據,寫入到(dào)數(shù)據庫以及Elastic Search中,完成鏈路消息的持久化。




步驟四:數據(jù)可視化(huà)


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



跟蹤數據流程圖(tú):使用流程圖工具(如(rú)Graphviz、Mermaid、AntV G6)可以繪製跟蹤數(shù)據的(de)流程圖(tú),展示(shì)消息在係統中的傳遞路徑和中間節點的處理過(guò)程(chéng)。



時間(jiān)軸和日誌視圖:通過在時間軸上展示跟蹤數據的時(shí)間戳和事件順序,可以更清晰地了解消息的傳遞順序和(hé)時間間隔。日(rì)誌視圖(tú)可以展示每個消息的詳細信息,包括消息內容、上下文和處理日誌等。



拓撲(pū)圖和依賴關係圖:使用拓撲圖工(gōng)具(如D3.js、Neo4j)可以繪製跟蹤數據的拓撲圖,展示服務之(zhī)間的關係和依賴。


官方微信公眾號

国产亚洲熟妇在线视频雲計算(suàn)科技股份(fèn)有(yǒu)限公司(sī) 版權所有 2003-2023

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

国产亚洲熟妇在线视频-亚洲熟妇AV乱码在线观看-亚州国产AV一区二区三区伊在-中文字幕无码人妻少妇免费视频-欧美 日韩 人妻 高清 中文-熟妇人妻中文字幕无码老熟妇-丰满熟女人妻一区二区三-亚洲精品字幕