4. Jaeger 架构与部署:组件与部署模式
Jaeger 是 CNCF 毕业的分布式追踪系统,其架构围绕“采集—处理—存储—查询”四个环节设计。理解 Jaeger 的组件构成与部署模式,是值班台环境配置移植适配的基础。本节将拆解 Jaeger 的核心组件,并对比单机部署与高可用部署的差异。
4.1 Jaeger 核心组件
Jaeger 由五个主要组件构成,每个组件承担明确的职责。下表列出各组件的功能、通信方式与关键配置项。
| 组件 | 角色 | 通信协议 | 关键配置项 |
|---|---|---|---|
| Agent | 客户端侧守护进程,接收应用发出的 Span,批量转发给 Collector | gRPC / Thrift (UDP) | --reporter.grpc.host-port |
| Collector | 接收 Agent 或直接来自应用的 Span,校验、采样、写入存储后端 | gRPC / HTTP | --collector.zipkin.host-port |
| Query | 提供 API 接口,从存储中检索 Trace 并返回给 UI | HTTP / gRPC | --query.storage.type |
| UI | Web 前端,展示 Trace 搜索、Span 详情、服务依赖图 | HTTP (浏览器 → Query) | --query.port |
| Ingester | (可选)从 Kafka 消费 Span 数据,批量写入存储,解耦 Collector 与存储 | Kafka | --ingester.kafka.brokers |
值班台适配要点: Agent 通常以 Sidecar 模式部署在应用 Pod 内,Collector 与 Query 作为独立服务部署。在移植适配时,需重点确认 Agent 与 Collector 之间的网络连通性,以及 Collector 写入存储(Elasticsearch / Cassandra)的认证与索引配置。
4.2 Jaeger 架构组件关系图
下图展示 Jaeger 各组件的协作流程:应用通过 Agent 上报 Span,Collector 接收后写入存储,Query 从存储读取数据并通过 UI 呈现。
4.3 单机部署模式
单机部署适用于开发测试环境或值班台小规模验证场景。所有组件运行在单一进程或同一主机内,存储使用内存或本地文件。
- 部署方式: 使用
jaeger-all-in-one二进制,内置 Agent、Collector、Query、UI 及内存存储。 - 启动命令:
jaeger-all-in-one \
--collector.zipkin.host-port=:9411 \
--query.port=16686
- 适用场景: 功能验证、单机调试、值班台环境快速搭建。
- 限制: 内存存储重启后数据丢失;无高可用;无法支撑生产级吞吐。
值班台移植适配建议: 单机部署用于验证 Agent 上报链路与 UI 查询功能。确认应用端 Jaeger SDK 配置的 Agent 地址指向 all-in-one 的端口(默认 6831/14250),即可快速完成端到端连通性测试。
4.4 高可用部署模式
生产环境必须采用高可用部署,消除单点故障并支持水平扩展。核心思路是将 Collector 与 Query 无状态化,存储后端使用 Elasticsearch 或 Cassandra 集群。
4.4.1 高可用架构要点
| 组件 | 高可用策略 | 扩展方式 |
|---|---|---|
| Agent | 每个应用 Pod 部署一个,故障不影响其他 Agent | 随应用自动扩缩 |
| Collector | 多副本 + 负载均衡(K8s Service / Nginx) | 水平扩展副本数 |
| Query | 多副本 + 负载均衡,共享同一存储 | 水平扩展副本数 |
| 存储 | Elasticsearch 集群 / Cassandra 集群 | 分片 + 副本 |
| Ingester | (可选)多副本消费 Kafka 分区 | 水平扩展副本数 |
4.4.2 高可用部署架构图
下图展示生产级高可用部署的组件拓扑,包含负载均衡、Kafka 缓冲层与存储集群。
4.5 部署模式对比
| 对比维度 | 单机部署 (all-in-one) | 高可用部署 |
|---|---|---|
| 组件数量 | 1 个进程 | 多组件多副本 |
| 存储 | 内存(重启丢失) | ES / Cassandra 集群 |
| 扩展性 | 不可扩展 | 水平扩展 |
| 可用性 | 单点故障 | 无单点 |
| 适用环境 | 开发 / 测试 / 值班台验证 | 生产 / 预发布 |
| 配置复杂度 | 低 | 高(需配置存储、Kafka、LB) |
值班台移植适配风险提示: 从单机迁移到高可用部署时,需同步修改 Agent 上报地址(从 all-in-one 端口改为 Collector 的 LB 地址),并确保存储索引模板与数据保留策略已提前配置。建议先在值班台环境使用 all-in-one 验证链路完整性,再逐步切换至高可用架构。