Page 392 - 《软件学报》2025年第9期
P. 392
王尚 等: 基于神经网络的分布式追踪数据压缩和查询方法 4303
图 10 则展示了基于神经网络压缩算法的时间对比, 每组柱状图从左到右分别是 TRACE、DZip、NCQT-T
和 NCQT-G. 需要注意的是, 纵坐标以 min 为单位, 并且采用非均匀刻度, 这是由于对比方法的时间开销均在 1 000 min
以上, 而 NCQT 的运行时间基本都在 30 min 以内. 实验发现, NCQT 在 4 个数据集上的效率是 TRACE 和 DZip 的
41.2–161.7 倍, 这表明 NCQT 在压缩追踪数据上比最先进的神经网络压缩算法更加高效, 这是我们设计的优势. 通
过利用追踪数据的特征, NCQT 在提取冗余后将文本数据转换为数字格式, 不仅减少了模型的输入, 而且减少了数
据的词汇量, 因而能更高效地压缩和解压. 同时, NCQT 将模型预测与算术编码拆解为两个并行的子进程, 大幅度
减少了压缩过程中的 I/O 等待时间
通过对比每个步骤的时间, 我们发现 NCQT 在冗余抽取步骤花费的时间平均不足 2 min, 与其他步骤相比, 耗
时几乎可以忽略不计, 但是可以带来显著的压缩效果提升. 除此之外, 基于神经网络的压缩算法均花费大量时间解
压数据, 几乎占整个时间开销的一半. 根据已有工作 [51] 的观察和分析, 在基于算术编码的方法中, 解码阶段通常需
要较长的时间, 因为需要搜索数字所在区间以获取正确编码. 另一方面, 压缩阶段的模型预测无需算术编码的结
果, 但解压阶段模型需要算术编码解码出下一个字符以组成新的预测窗口, 算术编码也需要模型产生的概率估计
解码字符, 这种循环依赖关系导致了我们无法通过并行算法加速解压过程.
通过对比不同数据集上的时间开销, 我们发现 NCQT 在 Train Ticket 数据集上用时更长, 尽管该数据集大小
并未与其他数据集存在明显差异. 主要原因是, Train Ticket 服务数量较多, 部分请求的调用链相对较长. NCQT 在
分组时将追踪数据按照数量划分为 4 组, 并且倾向于将相似的长追踪分为一组, 从而导致其中一个分组的数据长
度远高于其他分组, 无法充分利用并行压缩提高压缩和解压效率. 在第 4.4 节中, 我们将进一步研究分组参数对压
缩效率的影响.
4.3 与追踪查询工具的存储开销和查询性能对比 (RQ2)
在本节中, 我们将 NCQT 与常用的追踪存储和查询工具 Tempo 以及 Jaeger 进行了比较. 为了比较的公平性,
我们将 Tempo 和 Jaeger 以单机的形式部署在服务器上. 其中, Tempo 采用本地存储的方式保存追踪数据, 而 Jaeger
则使用内存存储组件保存数据, 我们通过工具的 OTLP receiver 将数据导入其中. 在本节的实验中, 我们默认选择
GRU 作为 NCQT 编码器的网络模型.
我们首先对比了不同工具在各数据集上的存储成本, 其结果如表 5 所示. 结果显示, Tempo 和 Jaeger 在所有数
据集上的存储开销均高于 NCQT. 其中, Jaeger 存储追踪数据所占空间最大, 平均是 Tempo 的 31 倍, 是 NCQT 的
673 倍. 尽管 Tempo 的空间占用小于原数据文件大小, 但仍明显高于 NCQT. 对比图 9 的实验结果, 我们发现 Tempo
和 Jaeger 与通用压缩算法相比需要更多的存储空间, 这是因为追踪查询工具为了便于查询为追踪数据建立了索
引, 传入的追踪文件越大, 建立索引所需的空间也会越多. 实验结果证明了这些追踪查询工具以牺牲存储为代价实
现对追踪数据的查询支持.
表 5 不同工具的存储成本比较 (MB)
工具 Train Ticket Sock Shop Robot Shop Astronomy Shop
原始 9 945 4 134 6 075 5 895
Tempo 1 156.4 411.1 929.4 858.6
Jaeger 44 707.1 15 134.1 24 009.9 20 991.2
NCQT 50.5 21.0 30.8 53.4
为了评估 NCQT 在查询上的性能, 我们使用表 6 中的一组查询对每个工具进行了测试, 这些查询特定于在 Robot
Shop 系统中收集到的 6.0 GB 数据集. 在设计查询集时, 我们综合考虑了 Tempo 和 Jaeger 支持的查询接口, 并参考
了 Tempo 提供的追踪查询语句 TraceQL. 查询集最终定义了 4 种查询类型, 包括追踪 ID 查询、字段查询、聚合查
询以及结构查询. 除了追踪 ID 查询以外, 我们对于每种查询类型设计了多条不同的查询语句, 表中后 3 列对应查询
结果涉及的追踪数、跨度数和结构种类. 对于表 6 中的每条查询, 我们将其转换为每种工具对应支持的查询语句, 并
取 10 次运行的平均值作为结果. 由于 Jaeger 未提供聚合查询或结构查询的接口, 因此我们将其在对应查询的结果置空.

