Page 380 - 《软件学报》2025年第9期
P. 380
王尚 等: 基于神经网络的分布式追踪数据压缩和查询方法 4291
该跨度自身的属性字段和父跨度生成的上下文字段. 因此, 一条追踪数据可以视为由所含跨度的字段信息以及跨
度之间的调用关系两部分组成. NCQT 在解析追踪文件时, 首先将跨度数据规范化为统一的格式, 并从中提取出追
踪的结构图.
如图 4 所示, 以符合 OpenTelemetry 规范的追踪数据为例, 数据包括此消息中跨度的资源以及源自该资源的
跨度列表. 每个跨度是由服务调用中的一次操作生成的, 代表应用程序的一次处理过程. 因此, 对于同一操作产生
的跨度数据, 其包含的属性字段相对固定, 受限于该操作的业务范围. 例如, 对于数据库查询的跨度“mongodb.
find”, 该数据中包含的属性字段通常只与数据库相关, 而对于解析主机名的跨度“dns.lookup”, 其属性字段往往只
包含 IP 相关的内容. 因此, NCQT 将一条追踪数据中的跨度处理为统一的键值表示, 按照操作种类交由不同的跨
度容器进行并行处理. 这种方式不仅有利于将相似的数据聚集在同一容器以便于更好地冗余提取, 也有利于搜索
时更快速地判断该种类的跨度是否包含满足查询条件的数据. 同时, NCQT 从上下文字段中提取跨度的调用关系,
并交由结构容器构建追踪的树状结构图, 以供后续通过结构相似性对追踪数据重新排序.
追踪数据 结构容器
跨度容器 0
跨度容器 1
图 4 追踪数据解析
3.1.1 预处理
追踪数据中存在着大量重复记录的字段和值, 预处理阶段的主要目的是删除跨度中高度重复的部分, 并以特
殊格式对它们进行编码, 为后续应用神经网络压缩以及搜索时快速定位做好准备. 具体而言, NCQT 应用了 3 条预
处理规则: 键值模式替换、组合提取和单调值处理.
● 键值模式替换. 此规则的思路在于用短的数字替换长的键值字符串表示. 每个跨度是由键值表示的字段组
成, 尽管服务可以自定义字段, 但字段的总数有限, 且大部分字段拥有相对确定的取值范围. 例如, 在第 4 节实验所
用的 robot-shop 数据集中, 尽管有上百万个跨度, 但是字段种类仅有 91 个, 且多数字段的取值种类少于 100, 仅有
部分数值类型的字段取值相对较多. NCQT 以跨度为单位将所有的字段键值对转换为数字表示. 例如, 跨度条目
(kind:client, http.status_code:200) 在键值模式替换后会被转换为 (0:0, 1:0). 同时, NCQT 在跨度容器中记录包含映
射关系的索引字典, 以便后续将数字还原回其原始格式.
● 组合提取. 此规则侧重于避免重复记录相同的字段名. 对于由同一个操作产生的跨度数据, 其字段通常是由
有限范围的属性组合生成, 因而每个跨度中都记录了相似的字段列表. NCQT 使用组合字典记录了每种跨度所有
可能的字段组合, 处理后的跨度数据仅需要记录对应组合的 ID, 并按照组合的顺序依次记录参数的数值索引. 例
如, 通过组合映射关系 (0) →(0, 1), 可以将规则一生成的键值对组合 (0:0, 1:0) 进一步转换为 0:(0, 0). 通过这种方式
不仅可以将数据编码为更简短的形式, 而且有利于在查询数据时快速定位目标字段在编码数据中的位置.

