在分布式微服务架构中,一个请求往往需要跨越多个服务节点。当出现性能瓶颈或故障时,如何快速定位问题?链路追踪(Distributed Tracing) 应运而生。SkyWalking 作为 Apache 顶级项目,是国产开源的全链路可观测性平台(APM),支持追踪、指标、日志三合一。本文将基于 SkyWalking 的典型架构图,详细拆解其核心组件、数据流转以及存储选型,帮助你从零理解链路追踪系统的工作原理。
假设一个下单请求经过了:网关 → 订单服务 → 库存服务 → 支付服务 → 仓储服务。当用户反馈"下单慢"时,传统日志无法快速定位是哪个服务、哪个方法耗时最长。链路追踪通过生成全局唯一的 TraceId,串联整个调用链,让每个环节的耗时、状态、异常一目了然。SkyWalking 除了支持分布式追踪,还集成了指标监控(Metrics)和服务网格(Service Mesh)观测能力。
SkyWalking 采用模块化设计,分为 探针(Agent) 、后端(OAP Server) 、存储(Storage) 和 UI(Web 界面) 四大部分。下图基于用户提供的架构描述,绘制了完整的组件关系:
展示层
存储层
SkyWalking Observability Analysis Platform
数据采集层
gRPC/HTTP
gRPC
分析引擎
查询引擎
指标聚合
展示 Trace/Metrics
应用探针 Java/.NET/Node.js
OAP Server
核心流程:
- 探针采集数据(Trace、Metric、Log)通过 gRPC 或 HTTP 发送给 OAP Server。
- OAP Server 进行流式分析、聚合和索引,将结果写入存储。
- UI 从 OAP Server 查询数据并可视化展示。
1. SkyWalking UI(前端界面)
提供可视化看板,主要功能包括:
- Tracing 模块:展示分布式调用链列表,支持按时间、服务、端点、耗时等条件过滤。点击单个 Trace 可查看瀑布图(Span 详情)。
- Metrics 模块:展示服务、实例、端点的 QPS、响应时间、成功率等指标曲线。
- Service Mesh 模块:集成 Istio 等 Service Mesh 数据,展示 TCP 层面的流量拓扑和延迟。
UI 通过 HTTP 请求 OAP Server 的 Query Core 获取数据。
2. SkyWalking Observability Analysis Platform(OAP 后端)
这是 SkyWalking 的大脑,采用模块化核心(Analysis Core + Query Core),支持 流式处理 和 批处理。
OAP 本身无状态,可以水平扩展。它利用 L1(内存)和 L2(存储)两级缓存提高性能。
3. Storage Implementers(存储实现)
SkyWalking 支持多种存储后端,可根据数据量和性能要求选择:
**实践:生产环境推荐 ElasticSearch 7+,配合 ILM(索引生命周期管理)自动清理过期数据。
SkyWalking 的探针使用 字节码增强(Byte-Buddy) 技术,无侵入地拦截常见框架(Spring Cloud、Dubbo、MySQL、Redis 等)的调用。
一个典型的 Trace 生成流程
- 在服务 A 接收到 HTTP 请求时,Agent 创建
TraceSegment,生成全局唯一的TraceId。 - 每个 RPC 调用(如 A -> B)会创建
Span,记录开始/结束时间、标签(HTTP URL、状态码)。 - 通过 HTTP Header 或 gRPC Metadata 将
TraceId和ParentSpanId传递给服务 B。 - 服务 B 的 Agent 接收到 Header 后,继续创建子 Span,形成调用树。
- 所有 Span 数据通过 gRPC 异步上报到 OAP Server。
跨进程传播协议
SkyWalking 支持 SW8 协议(基于 Header 的传播),同时也兼容 W3C TraceContext,能够与其他 APM 系统互通。
1. 下载与启动 OAP + UI
# 使用 Docker Compose 快速启动(包含 ES 存储) git clone https://github.com/apache/skywalking-docker.git cd skywalking-docker/8.9.0 docker-compose up -d # 访问 http://localhost:8080 查看 UI
2. Java Agent 接入
java -javaagent:/path/to/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=my-order-service -Dskywalking.collector.backend_service=oap-server:11800 -jar my-app.jar
3. 查看效果
发起任意请求后,在 UI 的 Trace 页面即可看到调用链,包含每个 Span 的耗时和详情。
适用场景:
- 需要 全栈可观测性(Trace + Metrics + Log 联动) → SkyWalking
- 已经使用 Prometheus 生态,仅需追踪 → Jaeger 或 Zipkin
- 运行在 Service Mesh(Istio)环境 → SkyWalking 可无缝集成
根据你提供的架构描述,我们重新整理为如下结构:
┌─────────────────────────────────────────────────────────────────────┐
│ SkyWalking UI │ │ ┌─────────────┐ ┌─────────────┐ ┌────────────────────────────┐ │ │ │ Tracing │ │ Metrics │ │ Service Mesh │ │ │ │Traces in │ │ Service │ │ Receiver in gRPC/HTTP │ │ │ │diff formats │ │ Mesh │ │ │ │ │ └─────────────┘ └─────────────┘ └────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────────┘
│ │ HTTP/GraphQL ▼
┌─────────────────────────────────────────────────────────────────────┐ │ SkyWalking Observability Analysis Platform │ │ ┌──────────────────────────┐ ┌──────────────────────────────┐ │ │ │ Tracing │ │ Metric │ │ │ │ ┌──────────────────┐ │ │ ┌────────────────────┐ │ │ │ │ │ Analysis Core │ │ │ │ Analysis Core │ │ │ │ │ └──────────────────┘ │ │ └────────────────────┘ │ │ │ │ ┌──────────────────┐ │ │ ┌────────────────────┐ │ │ │ │ │ Query Core │ │ │ │ Query Core │ │ │ │ │ └──────────────────┘ │ │ └────────────────────┘ │ │ │ └──────────────────────────┘ └──────────────────────────────┘ │ │ │ │ Storage Implementers │ └─────────────────────────────────────────────────────────────────────┘
│ ▼ ┌───────┬───────┬───────┬────────────┬─────────────┐ │ MySQL │ TiDB │ H2 │ ElasticSearch│ Sharding │ │ │ │ │ │ System │ └───────┴───────┴───────┴──────────────┴─────────────┘
通过本文的讲解,相信你已经掌握了 SkyWalking 的整体架构、核心组件以及数据流转过程。在实际生产环境中,推荐使用 ElasticSearch 作为存储,并结合 Kubernetes 的 sidecar 模式部署 Agent,实现自动化链路采集。
参考链接
- SkyWalking 官方文档
- GitHub 仓库
- 8.9.0 版本 Docker 示例
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/271717.html