带你十天轻松搞定 Go 微服务系列(九链路追踪)

Posted 微服务实践

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带你十天轻松搞定 Go 微服务系列(九链路追踪)相关的知识,希望对你有一定的参考价值。

我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

  1. 环境搭建:带你十天轻松搞定 Go 微服务系列(一)
  2. 服务拆分:带你十天轻松搞定 Go 微服务系列(二)
  3. 用户服务:带你十天轻松搞定 Go 微服务系列(三)
  4. 产品服务:带你十天轻松搞定 Go 微服务系列(四)
  5. 订单服务:带你十天轻松搞定 Go 微服务系列(五)
  6. 支付服务:带你十天轻松搞定 Go 微服务系列(六)
  7. RPC 服务 Auth 验证:带你十天轻松搞定 Go 微服务系列(七)
  8. 服务监控:带你十天轻松搞定 Go 微服务系列(八、服务监控)
  9. 链路追踪介绍

    JaegerUber 开发并开源的一款分布式追踪系统,兼容 OpenTracing API,适用于以下场景:

  10. 分布式跟踪信息传递
  11. 分布式事务监控
  12. 问题分析
  13. 服务依赖性分析
  14. 性能优化
  15. Jaeger 的全链路追踪功能主要由三个角色完成:

  16. client:负责全链路上各个调用点的计时、采样,并将 tracing 数据发往本地 agent
  17. agent:负责收集 client 发来的 tracing 数据,并以 thrift 协议转发给 collector
  18. collector:负责搜集所有 agent 上报的 tracing 数据,统一存储。
  19. go-zero 框架已经帮我们实现了链路追踪(详见:go-zero链路追踪),并且集成支持了 JaegerZipkin 这两种链路追踪上报工具,我们只要简单配置下,就可以可视化的查看到一个请求的完整的调用链,以及每一个环节的调用情况及性能。

    服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置服务 Telemetry 配置
  20. 访问 /api/user/userinfo api接口
  21. 第一章 环境搭建 中我们集成了 Jaeger 服务,并为其 Jaeger UI 端口号16686 做了宿主机端口 5000 的映射关系,所以在浏览器中输入 http://127.0.0.1:5000/ 访问 Jaeger UI 界面。选择 Search 菜单,在 Service 下拉框中选择 user.api,最后点击 Find Traces 按钮,可以查询到刚刚访问的 /api/user/userinfo 接口的链路追踪数据。
  22. 点击进去,就可以看到这个 /api/user/userinfo 接口的链路时序图,以及服务依赖关系,和耗时情况。
  23. 右上角的下拉菜单可以选择不同的数据展示样式。
  24. 其他接口链路追踪效果图
  25. https://github.com/zeromicro/go-zero

    欢迎使用 go-zerostar 支持我们!

    关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

    带你十天轻松搞定 Go 微服务系列

    我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下:

    1. 环境搭建:带你十天轻松搞定 Go 微服务系列(一)
    2. 服务拆分:带你十天轻松搞定 Go 微服务系列(二)
    3. 用户服务:带你十天轻松搞定 Go 微服务系列(三)
    4. 产品服务:带你十天轻松搞定 Go 微服务系列(四)
    5. 订单服务(本文)
    6. 支付服务
    7. RPC 服务 Auth 验证
    8. 服务监控
    9. 链路追踪
    10. 分布式事务

    期望通过本系列带你在本机利用 Docker 环境利用 go-zero 快速开发一个商城系统,让你快速上手微服务。

    完整示例代码:https://github.com/nivin-studio/go-zero-mall

    首先,我们来看一下整体的服务拆分图:

  26. 进入服务工作区
  27. 创建 sql 文件
  28. $ vim model/order.sql
  29. 编写 sql 文件
  30. 创建 api 文件
  31. $ vim api/order.api
  32. 编写 api 文件
  33. 创建 proto 文件
  34. $ vim rpc/order.proto
  35. 编写 proto 文件
  36. 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);

  37. 运行模板生成命令
  38. $ goctl rpc proto -src ./rpc/order.proto -dir ./rpc
    服务配置,Mysql 服务配置,CacheRedis 服务配置
  39. 服务配置,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-zerostar 支持我们!

关注『微服务实践』公众号并点击 交流群 获取社区群二维码。

以上是关于带你十天轻松搞定 Go 微服务系列(九链路追踪)的主要内容,如果未能解决你的问题,请参考以下文章

带你十天轻松搞定 Go 微服务系列

带你十天轻松搞定 Go 微服务系列

带你十天轻松搞定 Go 微服务系列

[系列] go-gin-api 路由中间件 - Jaeger 链路追踪

从零开始,轻松搞定SpringCloud微服务系列

Spring Cloud系列之链路追踪

(c)2006-2024 SYSTEM All Rights Reserved IT常识