分布式鏈路追蹤最全詳解
分布式鏈路追蹤
分布式鏈路追蹤是一種用于監(jiān)控和調試分布式系統(tǒng)中請求流程的方法,在微服務架構非常重要。
隨著微服務架構的流行,在復雜的微服務架構系統(tǒng)中,會形成一個非常復雜的分布式服務調用鏈路。
如下圖所示:
當系統(tǒng)出現故障或異常時,需要快速確定問題的源頭。
分布式鏈路追蹤能夠幫助您識別故障點,追蹤請求在哪個環(huán)節(jié)出現問題,從而更快地排除故障。
分布式鏈路追蹤原理
分布式鏈路追蹤的原理涉及多個關鍵概念和組件,如下圖所示:
圖片
主要會包含如下8大組件:
1.追蹤(Trace)
追蹤是一個請求在分布式系統(tǒng)中的全局視圖,顯示了請求從起始到終點的流程,一個追蹤通常由多個分布式跨度(Span)組成。
2.跨度(Span)
跨度表示一個操作的時間片段,它記錄了操作的開始和結束時間、操作名稱、標簽等信息。
例如:一個HTTP請求、數據庫查詢等都可以是一個跨度。
3.上下文傳遞(Context Propagation)
在分布式系統(tǒng)中,跨度之間需要共享上下文信息,以便正確地構建追蹤。
上下文傳遞確保在請求跨越不同服務時,相關信息如請求ID、時間戳等能夠被正確傳遞。
4.唯一標識
為了構建一個完整的追蹤,每個跨度都需要一個唯一的標識符,這個標識符被用于關聯不同跨度,構建一個完整的追蹤視圖。
5.采樣(Sampling)
由于分布式追蹤可能會產生大量的數據,采樣是一種控制數據收集量的方法。通過采樣,只有一部分請求和跨度會被記錄,以減少資源消耗。
6.代理和收集器
在應用程序中嵌入追蹤代理,它負責捕獲應用程序中的跨度數據,這些代理將跨度數據發(fā)送到追蹤收集器進行處理。
7.存儲和索引
追蹤收集器將跨度數據存儲在后端的存儲系統(tǒng)中,通常是分布式數據庫或索引系統(tǒng),這些存儲系統(tǒng)用于存儲、索引和檢索跨度數據。
8.可視化界面
存儲的跨度數據可以通過可視化界面進行查詢和展示,開發(fā)人員和運維人員可以使用這些界面來查看請求路徑、性能信息和問題定位。
分布式鏈路追蹤系統(tǒng)
有許多分布式鏈路追蹤系統(tǒng)和工具可以幫助實現這些原理。一些常見的分布式鏈路追蹤系統(tǒng)包括:
1.Skywalking
SkyWalking和Zipkin一樣,也是一個開源的應用性能監(jiān)控和分析系統(tǒng),在國內使用較多。
圖片
主要功能:
- 全鏈路追蹤: SkyWalking 支持全鏈路追蹤,可以追蹤分布式系統(tǒng)中請求的流程路徑。
- 多語言支持: SkyWalking 提供多語言的客戶端,包括:Java、Python、Go、.NET等。
- 性能指標收集: 除了追蹤數據,SkyWalking 還可以收集系統(tǒng)性能指標,比如:響應時間、吞吐量、錯誤率等。
- 告警與通知: SkyWalking 允許設置警報規(guī)則,當性能或指標達到預定的閾值時,可以觸發(fā)告警通知。
工作原理:
- 代理和收集器: 在應用程序中嵌入 SkyWalking 代理,它會捕獲請求中的跨度數據,并將數據發(fā)送到 SkyWalking 收集器。
- 數據存儲: SkyWalking 收集器將跨度數據存儲在后端的存儲系統(tǒng)中,通常是數據庫或索引系統(tǒng)。這些存儲系統(tǒng)用于存儲、索引和檢索跨度數據。
- 可視化界面: 存儲的跨度數據可以通過 SkyWalking 的可視化界面查詢和展示。用戶可以使用界面查看請求的路徑、性能信息和指標圖表。
2.Zipkin
Zipkin是一款開源的分布式實時數據追蹤系統(tǒng),Zipkin 是一個獨立的開源項目,由Twitter開發(fā)并開源。
Zipkin 提供了可視化界面,用于查看請求的流程、跨度和時間線。
如下圖所示:
圖片
工作原理:
- 代理收集數據: 在應用程序中嵌入 Zipkin 代理,它會捕獲請求中的跨度數據,并將數據發(fā)送到 Zipkin 收集器。
- 數據存儲: Zipkin 收集器將跨度數據存儲在后端的存儲系統(tǒng)中,通常是數據庫或索引系統(tǒng)。這些存儲系統(tǒng)用于存儲、索引和檢索跨度數據。
- 可視化界面: 存儲的跨度數據可以通過 Zipkin 的可視化界面查詢和展示。用戶可以使用界面查看請求的路徑、性能信息和時間線。
3.Sleuth
Sleuth是 Spring Cloud的鏈路追蹤組件,也同樣實現了分布式跟蹤解決方案。
Sleuth主要是為Spring生態(tài)系統(tǒng)設計的,它提供了與Spring Boot和Spring Cloud的緊密集成,使開發(fā)人員能夠更輕松地將分布式追蹤添加到Spring應用中。
Zipkin和Sleuth都是用于實現分布式追蹤的工具,但Sleuth更加專注于與Spring生態(tài)系統(tǒng)的集成,而Zipkin則更加通用,可以適用于多種語言和框架。
4.Jaeger
Jaeger 一個開源的分布式鏈路追蹤系統(tǒng),由CNCF維護,它支持跨度數據的收集、存儲、索引和可視化。
5.PinPoint
Pinpoint 是一個開源的分布式應用性能監(jiān)控工具,專注于跟蹤和監(jiān)控分布式應用程序和微服務架構的性能。
綜上所述,分布式鏈路追蹤是一個關鍵工具,用于分析分布式系統(tǒng)中的請求流程和性能。
通過構建完整的請求追蹤,開發(fā)人員和運維人員可以更好地理解系統(tǒng)的工作方式,找出性能問題,并提供更好的用戶體驗。