Skip to content

Commit

Permalink
docs: 更新文档
Browse files Browse the repository at this point in the history
  • Loading branch information
dunwu committed Apr 14, 2023
1 parent 1b56f48 commit a388f7d
Showing 1 changed file with 23 additions and 1 deletion.
24 changes: 23 additions & 1 deletion source/_posts/04.DevOps/03.监控/02.链路追踪.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ Dapper 提出了一些很重要的核心概念:Trace、Span、Annonation 等
_Trace 和 Spans(图片来源于[Dapper 论文](https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf)_

- **Trace (追踪)** - 代表一次完整的请求。一次完整的请求是指,从客户端发起请求,记录请求流转的每一个服务,直到客户端收到响应为止。整个过程中,当请求分发到第一层级的服务时,就会生成一个全局唯一的 **Trace ID**,并且会随着请求分发到每一层级。因此,通过 **Trace ID** 就可以把一次用户请求在系统中调用的链路串联起来。
- **Span (跨度)** - 请求链路中的每个环节被成为跨度。由于每次 Trace 都可能会调用数量不定、坐标不定的多个服务,为了能够记录具体调用了哪些服务,以及调用的顺序、开始时点、执行时长等信息,每次开始调用服务前都要先埋入一个调用记录,这个记录称为一个 Span。
- **Span (跨度)** - 工作的基本单元。由于每次 Trace 都可能会调用数量不定、坐标不定的多个服务,为了能够记录具体调用了哪些服务,以及调用的顺序、开始时点、执行时长等信息,每次开始调用服务前都要先埋入一个调用记录,这个记录称为一个 Span。
- Span 的数据结构应该足够简单,以便于能放在日志或者网络协议的报文头里;也应该足够完备,起码应含有时间戳、起止时间、Trace 的 ID、当前 Span 的 ID、父 Span 的 ID 等能够满足追踪需要的信息。
- Trace 实际上都是由若干个有顺序、有层级关系的 Span 所组成一颗 Trace Tree (追踪树)。
- **Annotation**:用于业务自定义埋点数据,例如:一次请求的用户 ID,某一个支付订单的订单 ID 等。
Expand All @@ -58,8 +58,30 @@ _Trace 和 Spans(图片来源于[Dapper 论文](https://static.googleuserconte
- **SS(Server Send)阶段** - 服务端返回请求时埋点,这时会将上下文数据传递到异步上传队列中。
- **CR(Client Recieve)阶段** - 客户端接收返回结果时埋点,这时会将上下文数据传递到异步上传队列中。

下图显示了 Span 和 Trace 在系统中的样子。

![img](https://raw.githubusercontent.com/dunwu/images/dev/snap/20220420092134.png)

(图片来源于 [spring-cloud-sleuth 文档](https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/getting-started.html#getting-started-terminology)

> 图片说明:
>
> _每种颜色表示一个跨度(有七个跨度 - 从 A 到 G)_
>
> ```
> Trace Id = X
> Span Id = D
> Client Sent
> ```
>
> 类似上面的注释,表示当前跨度的跟踪 ID 设置为 X,跨度 ID 设置为 D。此外,从 RPC 的角度来看,发生了客户端发送事件。
下图显示了 span 的父子关系:

![](https://raw.githubusercontent.com/dunwu/images/dev/snap/20230414173703.png)

(图片来源于 [spring-cloud-sleuth 文档](https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/getting-started.html#getting-started-terminology)

## 链路追踪实现

一个完整的数据链路系统大致可以分为三个相对独立的模块:
Expand Down

0 comments on commit a388f7d

Please sign in to comment.