帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)
序言
我們通過一個系列文章跟大家詳細展示一個 go-zero 微服務示例,整個系列分十篇文章,目錄結構如下:
-
環境搭建: 帶你十天輕鬆搞定 Go 微服務系列(一)
-
服務拆分: 帶你十天輕鬆搞定 Go 微服務系列(二)
-
使用者服務: 帶你十天輕鬆搞定 Go 微服務系列(三)
-
產品服務: 帶你十天輕鬆搞定 Go 微服務系列(四)
-
訂單服務: 帶你十天輕鬆搞定 Go 微服務系列(五)
-
支付服務: 帶你十天輕鬆搞定 Go 微服務系列(六)
-
RPC 服務 Auth 驗證: 帶你十天輕鬆搞定 Go 微服務系列(七)
-
鏈路追蹤 (本文)
-
分散式事務
期望通過本系列帶你在本機利用 Docker 環境利用 go-zero 快速開發一個商城系統,讓你快速上手微服務。
完整示例程式碼:http://github.com/nivin-studio/go-zero-mall
首先,我們來看一下整體的服務拆分圖:
9.1 Jaeger
介紹
Jaeger
是 Uber
開發並開源的一款分散式追蹤系統,相容 OpenTracing API
,適用於以下場景:
-
分散式跟蹤資訊傳遞
-
分散式事務監控
-
問題分析
-
服務依賴性分析
-
效能優化
Jaeger
的全鏈路追蹤功能主要由三個角色完成:
-
client tracing agent
-
agent client tracing thrift collector
-
collector agent tracing
9.2 go-zero
使用 Jaeger
鏈路追蹤
go-zero
框架已經幫我們實現了鏈路追蹤(詳見:go-zero鏈路追蹤),並且整合支援了 Jaeger
, Zipkin
這兩種鏈路追蹤上報工具,我們只要簡單配置下,就可以視覺化的檢視到一個請求的完整的呼叫鏈,以及每一個環節的呼叫情況及效能。
9.2.1 新增 user api
服務 Telemetry
配置
$ vim mall/service/user/api/etc/user.yaml
Name: User Host: 0.0.0.0 Port: 8000 ... Telemetry: Name: user.api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.2 新增 user rpc
服務 Telemetry
配置
$ vim mall/service/user/rpc/etc/user.yaml
Name: user.rpc ListenOn: 0.0.0.0:9000 ... Telemetry: Name: user.rpc Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.3 新增 product api
服務 Telemetry
配置
$ vim mall/service/product/api/etc/product.yaml
Name: Product Host: 0.0.0.0 Port: 8001 ... Telemetry: Name: product.api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.4 新增 product rpc
服務 Telemetry
配置
$ vim mall/service/product/rpc/etc/product.yaml
Name: product.rpc ListenOn: 0.0.0.0:9001 ... Telemetry: Name: product.rpc Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.5 新增 order api
服務 Telemetry
配置
$ vim mall/service/order/api/etc/order.yaml
Name: Order Host: 0.0.0.0 Port: 8002 ... Telemetry: Name: order.api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.6 新增 order rpc
服務 Telemetry
配置
$ vim mall/service/order/rpc/etc/order.yaml
Name: order.rpc ListenOn: 0.0.0.0:9002 ... Telemetry: Name: order.rpc Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.7 新增 pay api
服務 Telemetry
配置
$ vim mall/service/pay/api/etc/pay.yaml
Name: Pay Host: 0.0.0.0 Port: 8003 ... Telemetry: Name: pay.api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
9.2.8 新增 pay rpc
服務 Telemetry
配置
$ vim mall/service/pay/rpc/etc/pay.yaml
Name: pay.rpc ListenOn: 0.0.0.0:9003 ... Telemetry: Name: pay.rpc Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
提示:配置修改後,需要重啟服務才會生效。
9.3 使用 Jaeger UI
檢視鏈路
-
訪問
/api/user/userinfo
api介面
-
在 第一章 環境搭建 中我們集成了
Jaeger
服務,併為其Jaeger UI
埠號16686
做了宿主機埠5000
的對映關係,所以在瀏覽器中輸入http://127.0.0.1:5000/
訪問Jaeger UI
介面。選擇Search
選單,在Service
下拉框中選擇user.api
,最後點選Find Traces
按鈕,可以查詢到剛剛訪問的/api/user/userinfo
介面的鏈路追蹤資料。
-
點選進去,就可以看到這個
/api/user/userinfo
介面的鏈路時序圖,以及服務依賴關係,和耗時情況。
-
右上角的下拉選單可以選擇不同的資料展示樣式。
-
其他介面鏈路追蹤效果圖
專案地址
http://github.com/zeromicro/go-zero
歡迎使用 go-zero
並 star 支援我們!
微信交流群
關注『 微服務實踐 』公眾號並點選 交流群 獲取社群群二維碼。
- 簡單易懂的 Go 泛型使用和實現原理介紹
- 單體服務開發最佳實踐
- 通過 SingleFlight 模式學習 Go 併發程式設計
- 進城內優雅管理多個服務
- Go Web 服務框架實現詳解
- go-zero程式碼生成器助你高效開發
- 構建 Go 應用 docker 映象的十八種姿勢
- 史上最強程式碼自測方法,沒有之一!
- 帶你十天輕鬆搞定 Go 微服務系列(九、鏈路追蹤)
- 帶你十天輕鬆搞定 Go 微服務系列(八、服務監控)
- 帶你十天輕鬆搞定 Go 微服務系列(七)
- 小米電商 Apache Dubbo-go 微服務實踐
- 帶你十天輕鬆搞定 Go 微服務系列(三)
- 帶你十天輕鬆搞定 Go 微服務系列(二)
- 帶你十天輕鬆搞定 Go 微服務系列(一)
- Go 分散式令牌桶限流 兜底保障
- 最簡單的服務響應時長優化方法,沒有之一
- 夢想總是要有的 - 工作20年程式設計師的2021年終總結
- go-zero 分散式事務最佳實踐
- 用 Go Redis 實現分散式鎖