SkyWalking 源码分析 Collector 接收 Trace 数据
1. 概述
分布式链路追踪系统,链路的追踪大体流程如下:
1、 Agent收集Trace数据;
2、 Agent发送Trace数据给Collector;
3、 Collector接收Trace数据;
4、 Collector存储Trace数据到存储器,例如,数据库;
本文主要分享【第三部分】 SkyWalking Collector 接收 Trace 数据。
> 友情提示:Collector 接收到 TraceSegment 的数据,对应的类是 Protobuf 生成的。考虑到更加易读易懂,本文使用 TraceSegment 相关的原始类。
大体流程如下:

- Collector 接收到 TraceSegment 数据后,进行构建。
- 【蓝色流程】构建成功,进行流式处理,最终存储到存储器( 例如,ES / H2 )。
- 【粉色流程】构建失败,写入 Buffer 文件进行暂存。
- 【绿色流程】后台线程,定时读取 Buffer 文件,重新提交构建。
什么是构建?
从TraceSegment 数据中,会构建出更多的数据维度,如下图所示:

构建的过程,本文只分享调用的过程,具体怎么生成新的数据,数据的流式处理与存储,在 《SkyWalking 源码解析 —— Collector 存储 Trace 数据》 详细解析。
为什么构建会失败?
在TraceSegment 里的数据结构,例如操作名( operationName )和操作编号( operationId ) ,在 《SkyWalking 源码分析 —— Agent 收集 Trace 数据》 中我们可以看到,考虑到网络传输,优先使用 operationId ,若不存在( 例如操作还未注册,或者注册了 Agent 未同步到本地 ),则使用 operationName 。