設計和應用分布式調用跟蹤系統


分布式追蹤系統dapper

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

 

>>為什么需要分布式調用跟蹤系統

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

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

一個請求可能會涉及到幾十個服務的協同處理, 牽扯到多個團隊的業務系統,那么如何快速准確的定位到線上故障?
同時,缺乏一個自上而下全局的調用id,如何有效的進行相關的數據分析工作?

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

一個典型的分布式系統請求調用過程:

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

>>調用跟蹤系統的業務場景

(1)故障快速定位

通過調用鏈跟蹤,一次請求的邏輯軌跡可以用完整清晰的展示出來。
開發中可以在業務日志中添加調用鏈ID,可以通過調用鏈結合業務日志快速定位錯誤信息。

(2)各個調用環節的性能分析

在調用鏈的各個環節分別添加調用時延,可以分析系統的性能瓶頸,進行針對性的優化。

(3)各個調用環節的可用性,持久層依賴等

通過分析各個環節的平均時延,QPS等信息,可以找到系統的薄弱環節,對一些模塊做調整,如數據冗余等。

(4)數據分析等

調用鏈是一條完整的業務日志,可以得到用戶的行為路徑,匯總分析應用在很多業務場景。


>>分布式調用跟蹤系統的設計

(1)分布式調用跟蹤系統的設計目標

低侵入性,應用透明:

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

低損耗:

服務調用埋點本身會帶來性能損耗,這就需要調用跟蹤的低損耗,
實際中還會通過配置采樣率的方式,選擇一部分請求去分析請求路徑

大范圍部署,擴展性:

作為分布式系統的組件之一,一個優秀的調用跟蹤系統必須支持分布式部署,具備良好的可擴展性

(2)埋點和生成日志

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

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

TraceId、RPCId、調用的開始時間,調用類型,協議類型,調用方ip和端口,請求的服務名等信息;
調用耗時,調用結果,異常信息,消息報文等;
預留可擴展字段,為下一步擴展做准備;

(3)抓取和存儲日志

日志的采集和存儲有許多開源的工具可以選擇,
一般來說,會使用離線+實時的方式去存儲日志,主要是分布式日志采集的方式。
典型的解決方案如Flume結合Kafka等MQ。

(4)分析和統計調用鏈數據

一條調用鏈的日志散落在調用經過的各個服務器上,
首先需要按 TraceId 匯總日志,然后按照RpcId 對調用鏈進行順序整理。
調用鏈數據不要求百分之百准確,可以允許中間的部分日志丟失。

(5)計算和展示

匯總得到各個應用節點的調用鏈日志后,可以針對性的對各個業務線進行分析。
需要對具體日志進行整理,進一步儲存在HBase或者關系型數據庫中,可以進行可視化的查詢。

>>調用跟蹤系統的選型

大的互聯網公司都有自己的分布式跟蹤系統,
比如Google的Dapper,Twitter的zipkin,淘寶的鷹眼,新浪的Watchman,京東的Hydra等。

(1)Google的Drapper

Dapper是Google生產環境下的分布式跟蹤系統,Dapper有三個設計目標:

低消耗:跟蹤系統對在線服務的影響應該做到足夠小。

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

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

Drapper的日志格式:

dapper用span來表示一個服務調用開始和結束的時間,也就是時間區間。

dapper記錄了span的名稱以及每個span的ID和父ID,如果一個span沒有父ID被稱之為root span。所有的span都掛在一個特定的trace上,共用一個traceID,這些ID用全局64位整數標示。

Drapper如何進行跟蹤收集:

分為3個階段:

①各個服務將span數據寫到本機日志上;

②dapper守護進程進行拉取,將數據讀到dapper收集器里;

③dapper收集器將結果寫到bigtable中,一次跟蹤被記錄為一行。 

 

(2)淘寶的鷹眼

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

鷹眼埋點和生成日志:

如何抓取和存儲日志:

鷹眼的實現小結:

 

詳情見:淘寶-分布式調用跟蹤系統介紹

參考資料:
分布式追蹤系統dapper

Dapper,大規模分布式系統的跟蹤系統

李林峰《分布式服務框架原理與實踐》

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM