Skip to content

Commit

Permalink
fix typo
Browse files Browse the repository at this point in the history
  • Loading branch information
isno committed Jan 24, 2025
1 parent b7a4ce8 commit 3e246f3
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 11 deletions.
2 changes: 1 addition & 1 deletion Observability/What-is-Observability.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,6 @@ Google Cloud 在介绍可观测标准项目 OpenTelemetry 时提到一个概念

“遥测数据”看起来陌生,但你肯定无意间听过。观看火箭发射的直播时,你应该听到过类似的指令:“东风光学 USB 雷达跟踪正常,遥测信号正常” 。随着火箭升空,直播画面还会特意切换到一个看起来“高大上”仪表控制台。

事实上,软件领域的可观测性与火箭发射系统的遥测概念并无本质区别,皆为**全方位收集系统各方面的运行数据(遥测数据),来了解系统内部的运作情况**。因此,可观测性本质上是一门数据收集和分析的科学,帮助人们解决复杂系统中的故障检测、性能优化以及风险预警等问题。
事实上,软件领域的可观测性与火箭发射系统的遥测概念并无本质区别,皆为**全方位收集系统各方面的运行数据(遥测数据),来了解系统内部的运作情况**。因此,可观测性本质上是一门数据收集、分析的科学,帮助人们解决复杂系统的故障检测、性能优化以及风险预警等问题。

[^1]: 参见 https://cloud.google.com/learn/what-is-opentelemetry
19 changes: 9 additions & 10 deletions Observability/tracing.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,14 @@ Uber 是实施微服务架构的先驱,他们曾经撰写博客介绍过它们

Dapper 论文的发布,让治理复杂分布式系统迎来了转机,链路追踪技术开始在业内备受推崇!

## 1. 链路追踪核心概念
## 1. 链路追踪的基本原理

如今的链路追踪系统大多以 Dapper 为原型设计,因为它们也统一继承了 Dapper 的核心概念:

- **追踪(trace)**:表示一次完整的请求,从客户端发起到收到响应的全过程。请求流转时,第一层服务会生成一个全局唯一的 Trace ID,随后该 ID 会随请求传递至各层服务。通过 Trace ID,可以串联起请求在系统中所有服务的调用链路。
- **跨度(Span)**:表示一次调用,是链路追踪的基本单元。每个 Trace 可能涉及多个服务调用,且数量和顺序不固定。为记录具体调用的服务、调用顺序、开始时间和执行时长等信息,每次调用服务前需生成一条记录,称为 Span。Span 的数据结构应简单,便于嵌入日志或网络协议报文头;同时要足够完整,至少包括时间戳、起止时间、Trace ID、当前 Span ID、父 Span ID 等信息,以满足追踪需求。
- **Annotation**:记录业务自定义数据,如请求用户 ID、支付订单 ID 等。
- **追踪(trace)**:Trace 表示一次完整的分布式请求生命周期,它是一个全局上下文,包含了整个调用链所有经过的服务节点和调用路径。例如,用户发起一个请求,从前端服务到后端数据库的多次跨服务调用构成一个 Trace。
- **跨度(Span)**:Span 是 Trace 中的一个基本单元,表示一次具体的操作或调用。一个 Trace 由多个 Span 组成,按时间和因果关系连接在一起。Span 内有描述操作的名称 span name、记录操作的开始时间和持续时间、Trace ID、当前 Span ID、父 Span ID(构建调用层级关系)等信息。

总结链路追踪系统的基本原理是,为每个跨度记录一个可读的 span name、span id 和 parent id,一个请求内的跨度共享一个 trace id。通过 trace id,便可重建分布式系统服务间调用的因果关系。换言之,链路追踪(Trace)是由若干具有顺序、层级关系的跨度(Span)组成一棵追踪树(Trace Tree),如图 9-1 所示。
总结链路追踪系统的基本原理是,为每个操作或调用记录一个跨度,一个请求内的所有跨度共享一个 trace id。通过 trace id,便可重建分布式系统服务间调用的因果关系。换言之,链路追踪(Trace)是由若干具有顺序、层级关系的跨度组成一棵追踪树(Trace Tree),如图 9-1 所示。

:::center
![](../assets/Dapper-trace-span.png)<br/>
Expand All @@ -33,7 +32,7 @@ Dapper 论文的发布,让治理复杂分布式系统迎来了转机,链路

目前,追踪系统的主流实现有三种,分别是基于日志的追踪(Log-Based Tracing)、基于服务的追踪(Service-Based Tracing)、基于边车代理的追踪(Sidecar-Based Tracing),具体如下:

- 基于日志的追踪:直接将 Trace、Span 等信息输出到应用日志中,然后采集所有节点的日志汇聚到一起,再根据全局日志重建完整的调用链拓扑。这种方式的优点是没有网络开销、应用侵入性小、性能影响低;但其缺点是,业务调用与日志归集不是同时完成的,有可能业务调用已经结束,但日志归集不及时,导致追踪失真。
- **基于日志的追踪**:直接将 Trace、Span 等信息输出到应用日志中,然后采集所有节点的日志汇聚到一起,再根据全局日志重建完整的调用链拓扑。这种方式的优点是没有网络开销、应用侵入性小、性能影响低;但其缺点是,业务调用与日志归集不是同时完成的,有可能业务调用已经结束,但日志归集不及时,导致追踪失真。

根据图 9-13,总结 Dapper 基于日志实现的追踪如下:

Expand All @@ -45,15 +44,15 @@ Dapper 论文的发布,让治理复杂分布式系统迎来了转机,链路
图 9-13 基于日志实现的追踪
:::

- 基于服务的追踪:通过某些手段给目标应用注入追踪探针(Probe),然后通过探针收集服务调用信息并发送给链路追踪系统。探针通常被视为一个嵌入目标服务的小型微服务系统,具备服务注册、心跳检测等功能,并使用专用的协议将监控到的调用信息通过独立的 HTTP 或 RPC 请求发送给追踪系统。
- **基于服务的追踪**:通过某些手段给目标应用注入追踪探针(Probe),然后通过探针收集服务调用信息并发送给链路追踪系统。探针通常被视为一个嵌入目标服务的小型微服务系统,具备服务注册、心跳检测等功能,并使用专用的协议将监控到的调用信息通过独立的 HTTP 或 RPC 请求发送给追踪系统。

以 SkyWalking 的 Java 追踪探针为例,它实现的原理是将需要注入的类文件(追踪逻辑代码)转换成字节码,然后通过拦截器注入到正在运行的应用程序中。比起基于日志实现的追踪,基于服务的追踪在资源消耗和侵入性(但对业务工程师基本无感知)上有所增加,但其精确性和稳定性更高。现在,基于服务的追踪是目前最为常见的实现方式,被 Zipkin、Pinpoint、SkyWalking 等主流链路追踪系统广泛采用。

- 基于边车代理的追踪这是服务网格中的专属方案,优势如下
- **边车代理对应用完全透明**:有自己独立数据通道,追踪数据通过控制平面上报,不会有任何依赖或干扰;
- **基于边车代理的追踪**这是服务网格中的专属方案,基于边车代理的模式无需修改业务代码,也没有额外的开销,是最理想的分布式追踪模型。总结它的特点如下
- **对应用完全透明**:有自己独立数据通道,追踪数据通过控制平面上报,不会有任何依赖或干扰;
- **与编程语言无关**:无论应用采用什么编程语言,只要它通过网络(如 HTTP 或 gRPC)访问服务,就可以被追踪到。

基于边车代理的模式无需修改业务代码,也没有额外的开销,是最理想的分布式追踪模型。目前,市场占有率最高 Envoy 就提供了链路追踪数据采集功能,但 Envoy 没有自己的界面端和存储端,需要配合专门的 UI 与存储系统来使用。现在 Zipkin、SkyWalking、Jaeger 和 LightStep Tracing 等等系统都能够接收来自 Envoy 的链路追踪数据,充当其界面和存储端。
目前,市场占有率最高的边车代理 Envoy 就提供了链路追踪数据采集功能,但 Envoy 没有自己的界面端和存储端,需要配合专门的 UI 与存储系统来使用。不过,Zipkin、SkyWalking、Jaeger 和 LightStep Tracing 等等系统都能够接收来自 Envoy 的链路追踪数据,充当其界面和存储端。

## 3. 数据展示

Expand Down

0 comments on commit 3e246f3

Please sign in to comment.