7.1 全链路追踪系统简介
在微服务开发中,一次服务的调用也许会涉及多个依赖服务和团队。当线上出现问题时,通常需要多个团队配合定位,排查问题需要的时间较长,涉及的人员较广,这样排查问题的效率很低。全链路追踪系统就是为了解决这些问题而开发,有了该系统,可以在发生故障时能够快速定位问题并解决问题。
最为开发人员所熟知的全链路追踪系统是谷歌公司的 Dapper。谷歌公司开发 Dapper 系统是为了收集复杂的分布式系统的行为信息,大部分开源的分布式链路追踪系统都是基于 Dapper 的基本原理开发的。本节主要讲解全链路追踪系统的设计目标及基本概念。
7.1.1 基本特性
全链路追踪系统作为一个追踪监控系统,需要快速发现线上系统的故障,并能迅速定位故障位置,同时可以分析分布式系统中存在的性能瓶颈,从而辅助优化系统。这就要求全链路系统可以实时并全量地提供系统中的行为数据,做到高可用,并全面展现链路信息。
全链路追踪系统的设计目标主要包含以下几点:
- 性能消耗低。调用链追踪应该对服务影响足够小,不应消耗太多的系统资源。
- 代码侵入低。作为中间件,应当尽可能少地侵入或者不侵入其他业务系统,保持对使用方的透明性,减少开发人员的负担和接入门槛。
- 高度可扩展。整个调用链追踪通路都应该可扩展,以应对不断接入的服务。
- 实时数据采集。全链路追踪系统从数据采集、分析、查询,到展示整个链路的操作都要尽量快速,这样才能完成对线上问题的快速定位。
- 提供决策支持。全链路追踪系统可以定位业务系统问题,通过分析系统服务,为服务的优化提供决策支持。
通过上面列出的设计目标可知,全链路追踪系统的主要功能如下:
- 对调用请求进行整个链路追踪,分析每个环节的耗时,并协助开发和运维人员找到性能瓶颈。
- 展示调用服务之间的拓扑关系。
- 对线上服务进行监控与报警。
- 采用简单的接入方式,和业务代码低耦合。
- 实时采集数据,可以设置采集率。
- 可以展示调用链的 UI 页面。
7.1.2 基本概念
不同的开源链路追踪系统的设计虽然不同,但基本上都包括 Trace、Span、Tag 及采样率等几部分。本节将重点讲解全链路追踪系统中的一些常用概念。
1. Span
Span 是调用链中的一个基本单元。通常,一次服务调用会创建一个 Span,每个 Span 都有一个 ID 来标识,并且它在调用链中是唯一的。同时,Span 中还有其他信息,如描述信息、Tag 信息及父 Span id 等。
如图 7.1 所示为一个 Span 链路信息图。如果 Span 没有父 Span,则它是根 Span。通过 Span id 与 Parent id 可以查询整个链路中的 Span。同时,每个 Span 都封装了很多信息,如操作描述信息、时间戳信息及键值对(Tag)信息。

图 7.1 Span 链路图
2. Trace
通常,一个调用链会生成一条 Trace,由唯一的 Trace id 来标识。一条 Trace 可以由一个或多个 Span 组成,类似于树状结构,是一条调用链路,相当于一次完整的请求链路。
如图 7.2 所示,一条链路只有一个 Trace id,每个 Span 就是链路中的节点,节点之间的连线使 Span 与父节点 Span 发生联系,每个 Span 中保存了一些请求信息。

图 7.2 Trace 链路图
3. Tag
Tag 用来描述 Span 中的一些特殊信息。在调用链的过程中,开发者如果需要保存一些特殊的业务信息,可以通过 Tag 设置键值对的方式进行保存。
4. 采样率
线上环境对性能要求很高,如果对全部的请求都开启链路信息采集,会有一定的压力,因此可以通过设置采样率,在不牺牲大量性能的情况下进行信息采集,或者在某些关键时刻进行采集,便于定位线上问题。采样率可以设置全采样或某个速度进行采集。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论