2. 分布式追踪基础:Trace/Span 概念、OpenTelemetry 标准、Jaeger/Zipkin 选型对比

2.1 核心概念:Trace 与 Span

分布式追踪的核心目标是还原一次请求在多个微服务之间的完整调用链路。其数据模型由两个基本元素构成:Trace(追踪)和 Span(跨度)。

  • Trace:代表一次完整的请求或事务在分布式系统中的端到端路径。一个 Trace 由多个 Span 组成,共享同一个全局唯一的 TraceID。
  • Span:代表 Trace 中的一个命名、计时的工作单元。每个 Span 记录了一个服务或组件处理请求的起始时间、结束时间、状态以及元数据(如 HTTP 方法、URL、错误信息)。
关键关系:Span 之间通过 ParentSpanID 形成树状层级结构。根 Span(Root Span)没有父 Span,代表整个 Trace 的入口点。

下表总结了 Trace 与 Span 的核心属性:

属性 Trace Span
标识 TraceID(全局唯一) SpanID(Trace 内唯一)
粒度 一次完整请求 一个服务/组件内的操作
结构 Span 的有向无环图(DAG) 树状节点,包含 ParentSpanID
生命周期 请求开始到结束 操作开始到结束
典型数据 TraceID, Span 列表, 服务拓扑 SpanID, 开始/结束时间, 标签, 日志

以下 SVG 图展示了一个典型 Trace 的 Span 层级结构:

Trace 与 Span 层级结构示例 Root Span: /api/order/create (TraceID: abc123) Span A: order-service → validateOrder() Span B: payment-service → processPayment() Span C: inventory-service → reserveStock() 每个 Span 记录开始/结束时间、状态、标签;通过 ParentSpanID 形成树状调用链

2.2 OpenTelemetry 标准:统一的可观测性数据规范

OpenTelemetry(简称 OTel)是 CNCF 孵化的可观测性标准,旨在统一分布式追踪、指标和日志的数据采集与传输格式。它解决了过去 Jaeger、Zipkin、Prometheus 等工具各自为政、数据格式不互通的问题。

OpenTelemetry 的核心组件包括:

  • API:定义 Trace、Span、Metric、Log 的数据模型和操作接口,与语言无关。
  • SDK:实现 API,提供采样、上下文传播、导出等能力。
  • Collector:独立的代理服务,接收、处理、导出遥测数据,支持多种后端(Jaeger、Zipkin、Prometheus 等)。
  • Exporter:将数据发送到指定后端存储或分析系统。
标准优势:OTel 提供了统一的 W3C Trace Context 传播标准(traceparent 头),使得不同语言、不同框架的服务可以无缝串联 Trace,无需关心底层实现。

以下 SVG 图展示了 OpenTelemetry 的架构与数据流:

OpenTelemetry 标准架构与数据流 应用服务 (Java/Go/Python/Node) OTel API + SDK OTel Collector 接收 / 处理 / 导出 (批处理/采样/过滤) 后端存储 Jaeger / Zipkin Prometheus / Loki gRPC/HTTP OTLP OTel 核心优势 1. 统一数据模型:Trace/Span/Metric/Log 使用相同规范 2. 厂商中立:支持导出到 Jaeger、Zipkin、Datadog、AWS X-Ray 等 3. 自动插桩:主流框架(Spring Boot、Express、gRPC)开箱即用 4. 上下文传播:W3C Trace Context 标准,跨服务链路自动关联 5. 采样策略:支持头采样、尾采样、概率采样,降低存储成本

2.3 Jaeger vs Zipkin:选型对比

Jaeger 和 Zipkin 是目前最流行的两种分布式追踪后端系统,均支持 OpenTelemetry 数据接入。下表从多个维度进行对比,帮助你在值班台高可用方案中做出选择。

对比维度 Jaeger Zipkin
开发方 Uber → CNCF(毕业项目) Twitter → CNCF(孵化项目)
存储后端 Elasticsearch、Cassandra、Kafka、Badger(内存) Elasticsearch、Cassandra、MySQL、内存
UI 功能 丰富:服务拓扑图、Trace 对比、性能分析、依赖图 基础:Trace 查询、Span 详情、依赖图
高可用部署 组件多(Collector/Query/Agent/Ingester),架构复杂 组件少(Collector/Storage/UI),部署简单
采样策略 支持头采样、尾采样、自适应采样 仅支持头采样(通过 Brave 或 OTel)
社区活跃度 高,更新频繁,文档完善 中等,维护稳定,新功能较少
OTel 集成 原生支持 OTLP 协议 通过 OTel Collector 转换后接入
适用场景 大规模、复杂拓扑、需要深度分析 中小规模、快速部署、轻量级需求
选型建议:对于值班台高可用部署方案,如果团队运维能力较强且需要丰富的链路分析能力(如服务拓扑、Trace 对比),推荐 Jaeger;如果追求快速部署、组件简洁、资源占用低,推荐 Zipkin。两者均可通过 OpenTelemetry Collector 统一接入,降低迁移成本。

2.4 小结