欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > 分布式链路追踪理论

分布式链路追踪理论

2025/4/29 22:01:39 来源:https://blog.csdn.net/LUCIAZZZ/article/details/147577449  浏览:    关键词:分布式链路追踪理论

基本概念

分布式调用链标准-openTracing

Span-节点组成跟踪树结构

有一些特定的变量,SpanName SpanId traceId spanParentId

Trace(追踪):代表一个完整的请求流程(如用户下单),由多个Span组成

Span(跨度):请求经过的单个服务或操作(如订单服务调用支付服务)

包含:开始/结束时间、服务名、调用关系等

Context(上下文):传递Trace ID、Span ID等,确保链路连续

分布式链路追踪 = Trace ID串联全局 + Span记录局部 + 上下文传递


Span节点必须包含的内容

OperationName:操作名称

BeiginTime:开始时间

EndTime:结束时间

SpanTag:是一组键值对构成的Span的标签集合(key必须是String类型,value可以是String,Boolean和数字类型),这个的目的是为Span添加更多的描述信息

SpanLog:一组Span的日志集合,是键值对,记录日志信息

SpanContext:是一个上下文对象,会从上一个节点传递到下一个节点,里面包含了traceIdSpanIdBaggage(这是一个跨Span集合,上一个节点往Baggage加信息下一个节点可以拿到,不要放太多信息不然会导致占用空间大影响效率),我们通过上下文对象去进行跨进程传递


TraceSegment和TraceId原理

TraceSegment:

  1. 指的是一个进程中所有的Span的集合
  2. 如果多个线程协同产生同一个Trace(例如多个RPC调用不同的方法),它们只会共同创建一个TraceSegment
  3. 支持多入口,所以Skywalking去除了树节点RootSpan的概念,提出了三种Span模型

TraceId:

  1. TraceId应该是全局唯一的
  2. 我们的TraceId是根据时间错+算法生成的,所以会有时间回拨问题
  3. 我们有个变量lastTimeStamp保存上次TraceId生成的时间,然后在生成TraceId前进行比较,如果CuurentTimeMills比lastTimeStamp时间小,说明时间回拨了,我们就不生成Id,这样来保证TraceId全局唯一

概念简单总结

三个基本概念:Trace追踪,Span服务,Context上下文(用来传递信息)

分布式链路追踪 = Trace ID串联全局 + Span记录局部 + 上下文传递

Span中包含starTime,endTime,SpanContetx(上下文用来传递信息,包含TraceId,SpanId),

SpanTag(服务的标签),SpanLog(服务的日志信息)

TraceSegment(追踪段):一个进程中所有的Span的集合

TraceId:全局唯一,依赖时间戳,保存上次TraceId生成的时间,生成ID时时间戳进行对比,防止时间回拨问题


全链路追踪的工作流

阶段1:链路数据生成(埋点)

自动埋点:通过SDK或Agent自动在服务框架(如Spring Cloud、Dubbo)中注入追踪逻辑。

手动埋点:在业务代码中手动标记关键操作(如支付流程)。

示例:用户下单时,网关生成Trace ID=ABC,创建根Span(Span ID=1)


阶段2:链路数据采集与传输

采集方式:通过Agent或Sidecar(如Envoy)实时收集Span数据

传输协议:通过gRPC、HTTP等将数据发送到Collector(如Jaeger Collector)。

示例:订单服务(Span ID=2)和库存服务(Span ID=3)的Span通过Kafka发送到收集器。


阶段3:链路数据存储

存储后端:使用时序数据库(如InfluxDB)、列式存储(如Cassandra)或Elasticsearch。

数据模型:按Trace ID聚合Span,建立索引(如服务名、耗时、错误码)。

示例:Trace ID=ABC的所有Span被存储为一条完整链路。


阶段4:数据查询与分析

可视化通过UI工具(如Zipkin、SkyWalking)展示火焰图、调用拓扑。

分析能力:支持按服务名、耗时、错误码过滤,自动统计P99延迟、错误率。

示例:发现库存服务(Span ID=3)平均耗时500ms,触发告警


流程简单总结
  1. 链路数据生成:在进入Span服务前生成数据,一般来说再进入服务器会有自定义数据处理or服务启动前的Agent增强让服务有了多余的自定义逻辑
  2. 实时采集与传输链路数据:通过Http或者grpc采集和传输链路追踪的数据
  3. 链路数据存储:存储链路追踪的数据
  4. 数据查询与分析可视化:通过可视化页面展示详细的链路追踪流程和数据,显示服务细节,耗时,错误等

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词