06-追踪微服务调用

概要

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@startmindmap
* 追踪微服务调用
** 服务追踪的作用
*** 优化系统瓶颈
*** 优化链路调用
*** 生成网络拓扑
*** 透明传输数据
** 服务追踪系统原理
*** traceId,用于标识某一次具体的请求 ID。
*** spanId,用于标识一次 RPC 调用在分布式请求中的位置。
*** annotation,用于业务自定义埋点数据。
** 服务追踪系统实现
*** 数据采集层,负责数据埋点并上报。
*** 数据处理层,负责数据的存储与计算。
*** 数据展示层,负责数据的图形化展示。
@endmindmap

微服务架构下,由于进行了服务拆分,一次请求往往需要涉及多个服务,每个服务可能是由不同的团队开发,使用了不同的编程语言,还有可能部署在不同的机器上,分布在不同的数据中心。

服务追踪的作用

  • 第一,优化系统瓶颈。
    通过记录调用经过的每一条链路上的耗时,我们能快速定位整个系统的瓶颈点在哪里
  • 第二,优化链路调用。
    通过服务追踪可以分析调用所经过的路径,然后评估是否合理。
  • 第三,生成网络拓扑。
    通过服务追踪系统中记录的链路信息,可以生成一张系统的网络调用拓扑图,它可以反映系统都依赖了哪些服务,以及服务之间的调用关系是什么样的。
  • 第四,透明传输数据。

服务追踪系统原理

Dapper, a Large-Scale Distributed Systems Tracing Infrastructure:调用链:通过一个全局唯一的 ID 将分布在各个服务节点上的同一次请求串联起来,从而还原原有的调用关系,可以追踪系统问题、分析调用数据并统计各种系统指标。

  • traceId,用于标识某一次具体的请求 ID。当用户的请求进入系统后,会在 RPC 调用网络的第一层生成一个全局唯一的 traceId,并且会随着每一层的 RPC 调用,不断往后传递,这样的话通过 traceId 就可以把一次用户请求在系统中调用的路径串联起来。
  • spanId,用于标识一次 RPC 调用在分布式请求中的位置。当用户的请求进入系统后,处在 RPC 调用网络的第一层 A 时 spanId 初始值是 0,进入下一层 RPC 调用 B 的时候 spanId 是 0.1,继续进入下一层 RPC 调用 C 时 spanId 是 0.1.1,而与 B 处在同一层的 RPC 调用 E 的 spanId 是 0.2,这样的话通过 spanId 就可以定位某一次 RPC 请求在系统调用中所处的位置,以及它的上下游依赖分别是谁。
  • annotation,用于业务自定义埋点数据,可以是业务感兴趣的想上传到后端的数据,比如一次请求的用户 UID。

服务追踪系统实现

  • 数据采集层,负责数据埋点并上报。
  • 数据处理层,负责数据的存储与计算。
  • 数据展示层,负责数据的图形化展示。

参考

  • [从 0 开始学微服务 - 极客时间 - 胡忠想]