全面掌握 Jaeger 分布式調用鏈路跟蹤理論和實戰,Go 為所有使用 go-resty 庫發起 HTTP 請求集成鏈路跟蹤 jaeger(附源碼)。
介紹一個開源的分布式跟蹤系統 Jaeger,首先從理論基礎知識開始學習,將學習如何在 HTTP 請求中集成鏈路跟蹤,以及如何在 GORM 框架實現,最后學習 go-zero 框架集成鏈路跟蹤的源碼。
在我日常開發中,我們的項目是基于 go-zero 實現的微服務架構,各個服務/模塊之間的調用關系很復雜。go-zero 框架已經實現了從 api-rpc,rpc-rpc 各個服務鏈路跟蹤,幫我們省去了很多工作量。但是,我們在調用第三方庫的時候,難免遇到沒有集成鏈路跟蹤,需要自行加上的,例如通過 http 請求訪問其他等。
由于 Jaeger 是使用 Golang 開發的,因此大部分使用 Go 技術棧的,都會把它作為首選。
概述
當代的互聯網的服務,通常都是用復雜的、大規模分布式集群來實現的。互聯網應用構建在不同的軟件模塊集上,這些軟件模塊,有可能是由不同的團隊開發、可能使用不同的編程語言來實現、有可能布在了幾千臺服務器,橫跨多個不同的數據中心。因此,就需要一些可以幫助理解系統行為、用于分析性能問題的工具。
Jaeger 受到 Dapper 和 OpenZipkin 的啟發,是由 Uber Technologies 作為開源發布的分布式跟蹤系統。它用于監控和故障排除基于微服務的分布式系統,包括:
分布式上下文傳播
分布式事務監控
根本原因分析
服務依賴分析
性能/延遲優化
例子
比如一個前端服務可能對上百臺查詢服務器發起了一個Web查詢,每一個查詢都有自己的Ind