从0到微服务-7 服务追踪

微服务架构常见的组成部件:

接下来,我们具体学习下微服务追踪内容:

简单理解下:其实不光微服务,之前的单体应用也有追踪系统,就是说服务提供者本身出现了问题或者服务之间调用失败,我们怎么样快速的定位到在哪个环节出现问题,这就是我们今天要学习的服务追踪系统。

 

服务追踪的作用

快速定位请求失败原因

优化系统瓶颈(系统首页很慢,能定位到具体什么原因导致)

优化链路调用(减少不必要的服务依赖)

生成网络拓扑(服务之间的依赖关系图)

透明传输数据(用户登录系统认证信息)。

 

服务追踪系统原理

核心理念就是调用链:通过一个全局唯一的 ID 将分布在各个服务节点上的同一次请求串联起来,从而还原原有的调用关系,可以追踪系统问题、分析调用数据并统计各种系统指标。

后续的各种服务追踪系统都是基于Dapper衍生出来的,比较有名的阿里的鹰眼、美团的MTrace(初学者来说理解起来相对容易一些)、Twitter的Zipkin

Dapper.NET——轻量ORM - Cooper_Liu - 博客园 (cnblogs.com)

(37条消息) 阿里巴巴鹰眼系统了解_yongshenghuang的博客-CSDN博客_鹰眼系统

(37条消息) 美团-分布式会话跟踪系统架构设计与实践_贾红平的博客-CSDN博客

 

 

要理解服务追踪的原理,首先必须搞懂一些基本概念:traceId、spanId、annonation 等。

 

   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。

总的来说,traceId 是用于串联某一次请求在系统中经过的所有路径,spanId 是用于区分系统不同服务之间调用的先后关系,而 annotation 是用于业务自定义一些自己感兴趣的数据,在上传 traceId 和 spanId 这些基本信息之外,添加一些自己感兴趣的信息。

美团技术团队 (meituan.com)

 

服务追踪系统实现

上面是服务追踪系统架构图,你可以看到一个服务追踪系统可以分为三层。

数据采集层,负责数据埋点并上报。

数据处理层,负责数据的存储与计算。

数据展示层,负责数据的图形化展示。

 

posted @ 2022-05-21 22:49  chch213  阅读(96)  评论(0编辑  收藏  举报