带你十天轻松搞定 Go 微服务系列(九链路追踪)
Posted 微服务实践
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你十天轻松搞定 Go 微服务系列(九链路追踪)相关的知识,希望对你有一定的参考价值。
我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
环境搭建:带你十天轻松搞定 Go 微服务系列(一) 服务拆分:带你十天轻松搞定 Go 微服务系列(二) 用户服务:带你十天轻松搞定 Go 微服务系列(三) 产品服务:带你十天轻松搞定 Go 微服务系列(四) 订单服务:带你十天轻松搞定 Go 微服务系列(五) 支付服务:带你十天轻松搞定 Go 微服务系列(六) RPC 服务 Auth 验证:带你十天轻松搞定 Go 微服务系列(七) 服务监控:带你十天轻松搞定 Go 微服务系列(八、服务监控) 链路追踪介绍 Jaeger
是Uber
开发并开源的一款分布式追踪系统,兼容OpenTracing API
,适用于以下场景:分布式跟踪信息传递 分布式事务监控 问题分析 服务依赖性分析 性能优化 Jaeger
的全链路追踪功能主要由三个角色完成:client
:负责全链路上各个调用点的计时、采样,并将tracing
数据发往本地agent
。agent
:负责收集client
发来的tracing
数据,并以thrift
协议转发给collector
。collector
:负责搜集所有agent
上报的tracing
数据,统一存储。
服务go-zero
框架已经帮我们实现了链路追踪(详见:go-zero链路追踪),并且集成支持了Jaeger
,Zipkin
这两种链路追踪上报工具,我们只要简单配置下,就可以可视化的查看到一个请求的完整的调用链,以及每一个环节的调用情况及性能。Telemetry
配置服务Telemetry
配置服务Telemetry
配置服务Telemetry
配置服务Telemetry
配置服务Telemetry
配置服务Telemetry
配置服务Telemetry
配置访问 /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
接口的链路时序图,以及服务依赖关系,和耗时情况。右上角的下拉菜单可以选择不同的数据展示样式。 其他接口链路追踪效果图 https://github.com/zeromicro/go-zero
欢迎使用
go-zero
并 star 支持我们!关注『微服务实践』公众号并点击 交流群 获取社区群二维码。
带你十天轻松搞定 Go 微服务系列
我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:
环境搭建:带你十天轻松搞定 Go 微服务系列(一) 服务拆分:带你十天轻松搞定 Go 微服务系列(二) 用户服务:带你十天轻松搞定 Go 微服务系列(三) 产品服务:带你十天轻松搞定 Go 微服务系列(四) 订单服务(本文) 支付服务 RPC 服务 Auth 验证 服务监控 链路追踪 分布式事务
期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。
完整示例代码:https://github.com/nivin-studio/go-zero-mall
首先,我们来看一下整体的服务拆分图:
进入服务工作区 $
创建 sql 文件 $ vim model/order.sql
编写 sql 文件 创建 api 文件 $ vim api/order.api
编写 api 文件 创建 proto 文件 $ vim rpc/order.proto
编写 proto 文件 syntax = "proto3";
package orderclient;
option go_package = "order";
// 订单创建
message CreateRequest
int64 Uid = 1;
int64 Pid = 2;
int64 Amount = 3;
int64 Status = 4;
message CreateResponse
int64 id = 1;
// 订单创建
// 订单修改
message UpdateRequest
int64 id = 1;
int64 Uid = 2;
int64 Pid = 3;
int64 Amount = 4;
int64 Status = 5;
message UpdateResponse
// 订单修改
// 订单删除
message RemoveRequest
int64 id = 1;
message RemoveResponse
// 订单删除
// 订单详情
message DetailRequest
int64 id = 1;
message DetailResponse
int64 id = 1;
int64 Uid = 2;
int64 Pid = 3;
int64 Amount = 4;
int64 Status = 5;
// 订单详情
// 订单列表
message ListRequest
int64 uid = 1;
message ListResponse
repeated DetailResponse data = 1;
// 订单列表
// 订单支付
message PaidRequest
int64 id = 1;
message PaidResponse
// 订单支付
service Order
rpc Create(CreateRequest) returns(CreateResponse);
rpc Update(UpdateRequest) returns(UpdateResponse);
rpc Remove(RemoveRequest) returns(RemoveResponse);
rpc Detail(DetailRequest) returns(DetailResponse);
rpc List(ListRequest) returns(ListResponse);
rpc Paid(PaidRequest) returns(PaidResponse);运行模板生成命令
服务配置,$ goctl rpc proto -src ./rpc/order.proto -dir ./rpc
Mysql
服务配置,CacheRedis
服务配置
服务配置,CacheRedis
服务配置的实例化
$ vim rpc/internal/config/config.go
的依赖$ vim rpc/internal/svc/servicecontext.go
服务配置$ vim rpc/etc/order.yaml
服务配置的实例化$ vim rpc/internal/config/config.go
的依赖$ vim rpc/internal/svc/servicecontext.go
服务查询验证用户是否存在,再通过调用 product rpc
服务查询验证产品是否存在,以及判断产品库存是否充足。验证通过后,创建用户订单,并通过调用 product rpc
服务更新产品库存。$ vim rpc/internal/logic/createlogic.go
查询用户所有订单的 OrderModel
方法 FindAllByUid
$ vim model/ordermodel.go
服务配置,CacheRedis
服务配置,Auth
验证配置服务配置$ vim api/etc/order.yaml
服务配置的实例化$ vim api/internal/config/config.go
的依赖$ vim api/internal/svc/servicecontext.go
!提示:启动服务需要在 golang
容器中启动
$ !提示:启动服务需要在 golang
容器中启动
$ https://github.com/zeromicro/go-zero
欢迎使用 go-zero
并 star 支持我们!
关注『微服务实践』公众号并点击 交流群 获取社区群二维码。
以上是关于带你十天轻松搞定 Go 微服务系列(九链路追踪)的主要内容,如果未能解决你的问题,请参考以下文章