Page 378 - 《软件学报》2025年第9期
P. 378

王尚 等: 基于神经网络的分布式追踪数据压缩和查询方法                                                     4289


                    图  1(b) 显示了图  1(a) 调用关系下跨度的时间轴. 当服务接收到请求时, 执行相应的操作并生成跨度, 同时记
                 录服务调用的开始时间. 如果需要调用下游服务, 则将跨度上下文随请求传递到下一个服务. 下游服务收到请求后
                 提取跨度上下文, 执行相关操作并利用跨度上下文生成自己的跨度信息, 重复以上过程直至子跨度不再调用其他
                 服务. 当服务调用返回时, 记录结束时的时间戳并关闭此跨度.

                 2.2   分布式追踪数据结构
                    自从  Google 在  Dapper 中  [46] 提出分布式追踪的概念以后, 不同的分布式追踪技术基于此提出了不同的分布式
                 追踪标准. 例如, CNCF    提出的   OpenTracing  制定了一套无关厂商、无关平台的协议标准, Zipkin          和  Jaeger 均遵循
                 OpenTracing 协议; 而  Google 开源的  OpenCensus 不仅制定了分布式追踪的规范, 而且还提供了不同开发语言的实现
                 以及连接协议. 为了汇集不同分布式追踪协议的优势, CNCF                将  OpenTracing 和  OpenCensus 合并为  OpenTelemetry,
                 其逐渐成为追踪领域新的国际化标准.
                    图  2 展示了符合   OpenTelemetry 规范的追踪数据结构. 每条追踪数据对应于一个资源跨度列表                  (resourceSpans),
                 列表中的每个元素都代表一组资源             (resource) 下的跨度. 资源捕获了与记录追踪数据的实体相关的信息. 以部署
                 在  Kubernetes 容器中的服务产生的追踪数据为例, 资源记录了对应节点的名称、命名空间、以及                        Pod  和容器的名
                 称等相关信息. 作用域跨度         (scopeSpans) 包含了一组具有相同资源的跨度, 每个跨度可能属于不同的作用域
                 (scope). 作用域对应于应用程序代码中的逻辑单元, 开发人员可以选择适当的检测范围. 跨度                        (spans) 包含了一组
                 具有相同作用域的跨度, 其中每个跨度代表追踪中的一个操作或事件. 跨度数据中通常包含了跨度上下文信息
                 (traceId  和  spanId)、操作名、开始和结束的时间戳以及由键值对组成的属性列表等信息. 除了根跨度以外, 每个跨
                 度都记录了一个指向父跨度的标识符             (parentSpanId).








































                                          图 2 符合   OpenTelemetry  规范的追踪数据示例
   373   374   375   376   377   378   379   380   381   382   383