分布式呼叫跟蹤系統的設計和應用

2022-01-17 18:46:35 字數 2413 閱讀 7536

一、為什麼需要分布式呼叫跟蹤系統

隨著分布式服務架構的流行,特別是微服務等設計理念在系統中的應用,業務的呼叫鏈越來越複雜,

可以看到,隨著服務的拆分,系統的模組變得越來越多,不同的模組可能由不同的團隊維護,

乙個請求可能會涉及到幾十個服務的協同處理, 牽扯到多個團隊的業務系統,那麼如何快速準確的定位到線上故障?

同時,缺乏乙個自上而下全域性的呼叫id,如何有效的進行相關的資料分析工作?

對於大型**系統,如**、京東等電商**,這些問題尤其突出。

乙個典型的分布式系統請求呼叫過程:

比較成熟的解決方案是通過呼叫鏈的方式,把一次請求呼叫過程完整的串聯起來,這樣就實現了對請求呼叫路徑的監控。

通過呼叫鏈跟蹤,一次請求的邏輯軌跡可以用完整清晰的展示出來。

開發中可以在業務日誌中新增呼叫鏈id,可以通過呼叫鏈結合業務日誌快速定位錯誤資訊。

在呼叫鏈的各個環節分別新增呼叫時延,可以分析系統的效能瓶頸,進行針對性的優化。

通過分析各個環節的平均時延,qps等資訊,可以找到系統的薄弱環節,對一些模組做調整,如資料冗餘等。

呼叫鏈是一條完整的業務日誌,可以得到使用者的行為路徑,彙總分析應用在很多業務場景。

低侵入性,應用透明:

作為非業務元件,應當盡可能少侵入或者無侵入其他業務系統,對於使用方透明,減少開發人員的負擔

低損耗:

服務呼叫埋點本身會帶來效能損耗,這就需要呼叫跟蹤的低損耗,

實際中還會通過配置取樣率的方式,選擇一部分請求去分析請求路徑

大範圍部署,擴充套件性:

作為分布式系統的元件之一,乙個優秀的呼叫跟蹤系統必須支援分布式部署,具備良好的可擴充套件性

埋點即系統在當前節點的上下文資訊,可以分為客戶端埋點、服務端埋點,以及客戶端和服務端雙向型埋點。

埋點日誌通常要包含以下內容:

traceid、rpcid、呼叫的開始時間,呼叫型別,協議型別,呼叫方ip和埠,請求的服務名等資訊;

呼叫耗時,呼叫結果,異常資訊,訊息報文等;

預留可擴充套件字段,為下一步擴充套件做準備;

日誌的採集和儲存有許多開源的工具可以選擇,

一般來說,會使用離線+實時的方式去儲存日誌,主要是分布式日誌採集的方式。

典型的解決方案如flume結合kafka等mq。

一條呼叫鏈的日誌散落在呼叫經過的各個伺服器上,

首先需要按 traceid 彙總日誌,然後按照rpcid 對呼叫鏈進行順序整理。

呼叫鏈資料不要求百分之百準確,可以允許中間的部分日誌丟失。

彙總得到各個應用節點的呼叫鏈日誌後,可以針對性的對各個業務線進行分析。

需要對具體日誌進行整理,進一步儲存在hbase或者關係型資料庫中,可以進行視覺化的查詢。

應用級的透明:對於應用的程式設計師來說,是不需要知道有跟蹤系統這回事的。如果乙個跟蹤系統想生效,就必須需要依賴應用的開發者主動配合,那麼這個跟蹤系統顯然是侵入性太強的。

延展性:google至少在未來幾年的服務和集群的規模,監控系統都應該能完全把控住。

分為3個階段:

①各個服務將span資料寫到本機日誌上;

關於**的鷹眼系統,主要資料來自於內部分享,

鷹眼埋點和生成日誌:

如何抓取和儲存日誌:

鷹眼的實現小結:

詳情見:**-分布式呼叫跟蹤系統介紹

分布式呼叫鏈跟蹤系統 Zipkin

官網 github 英語 tracer,概念 範疇 分布式呼叫鏈跟蹤系統,或分布式鏈路呼叫監控系統。trace span zipkin 以 trace 結構表示對一次請求的追蹤,又把每個 trace 拆分為若干個有依賴關係的 span。span 模型 在微服務架構中,一次使用者請求可能會由後台若干個...

分布式鏈路呼叫跟蹤系統

一.為什麼需要分布式呼叫跟蹤 隨著分布式服務架構的流行,特別是微服務等設計理念在系統中的應用,系統架構變得越來越分散,如下圖所示 分布式服務拆分以後,系統變得日趨複雜,業務的呼叫鏈也越來越長,如何快速定位線上故障,就需要依賴分布式呼叫跟蹤技術。可以看到,隨著服務的拆分,系統的模組變得越來越多,不同的...

分布式 分布式系統的設計

在計算機領域,當單機效能達到瓶頸時,一般有兩種方式解決效能問題 而分布式系統的設計說白了就是 如何合理將乙個系統拆分成多個子系統部署到不同機器上。講設計方法前,先介紹分布式系統的特性 1 分布性 空間中隨機分布。這些計算機可以分布在不同的機房,不同的城市,甚至不同的國家。2 對等性 分布式系統中的計...