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