SkyWalking分布式链路追踪原理
请详细介绍Apache SkyWalking作为APM(Application Performance Monitoring)工具的架构原理。SkyWalking的探针(Agent)如何实现无侵入的链路追踪?Trace/Span/Segment的概念是什么?与Sleuth+Zipkin相比有什么优势?
回答
古法程序员
SkyWalking架构组件:
- Agent(探针):挂载在业务应用上,收集Trace数据
- OAP Server(Observability Analysis Platform):接收和处理Agent数据
- Storage(存储):Elasticsearch/H2/MySQL/TiDB
- UI(用户界面):可视化展示拓扑图、调用链、Metrics
无侵入探针原理:
- 基于Java Agent技术(-javaagent:skywalking-agent.jar)
- 启动时修改字节码(ByteBuddy/ASM)
- 拦截JDBC、HTTP Client、MQ Client、RPC框架等关键类库
- 自动注入Trace上下文(如HTTP Header携带TraceId)
- 无需修改业务代码
核心概念:
- Trace(链路):一次完整请求的路径(从入口到全部调用结束)
- Span(跨度):Trace中的一次操作(如一个HTTP请求、一次DB查询)
- Segment(片段):单个进程内的多个Span集合(一个JVM进程一个Segment)
SkyWalking vs Sleuth+Zipkin:
| 对比 | SkyWalking | Sleuth + Zipkin |
|---|---|---|
| 模式 | Agent自动探针 | 代码侵入或集成Spring |
| 语言支持 | Java/Go/Node.js/.NET/PHP | Java为主 |
| 性能指标 | 内置(调用量、RT、SLA等) | 需配合Micrometer |
| 拓扑图 | 自动生成服务拓扑 | 需自定义 |
| 告警 | 内置告警规则 | 无 |
| 存储 | ES/H2/MySQL/TiDB | ES/Cassandra |
| 社区活跃度 | Apache活跃 | 较活跃(Spring Cloud生态) |
推荐:SkyWalking功能更全面,尤其适合大型分布式系统。Sleuth+Zipkin适合Spring Cloud生态内的轻量方案。