ZIPKIN链路追踪原理分享

链路追踪原理分享

链路追踪的基本原理

  • 追踪(trace):Trace 表示一次完整的分布式请求生命周期,它是一个全局上下文,包含了整个调用链所有经过的服务节点和调用路径。例如,用户发起一个请求,从前端服务到后端数据库的多次跨服务调用构成一个 Trace。
  • 跨度(Span):Span 是 Trace 中的一个基本单元,表示一次具体的操作或调用。一个 Trace 由多个 Span 组成,按时间和因果关系连接在一起。Span 内有描述操作的名称 span name、记录操作的开始时间和持续时间、Trace ID、当前 Span ID、父 Span ID(构建调用层级关系)等信息。

原理:为每个操作或调用记录一个跨度,一个请求内的所有跨度共享一个 trace id。通过 trace id,便可重建分布式系统服务间调用的因果关系。链路追踪(Trace)是由若干具有顺序、层级关系的跨度组成一棵追踪树(Trace Tree),核心是在服务调用过程中收集 trace 和 span 信息,并汇总生成追踪树结构。

  • Span之间存在层级关系,形成调用树

数据采集

目前,追踪系统的主流实现有俩种,具体如下:

  • 基于日志的追踪:直接将 Trace、Span 等信息输出到应用日志中,然后采集所有节点的日志汇聚到一起,再根据全局日志重建完整的调用链拓扑。这种方式的优点是没有网络开销、应用侵入性小、性能影响低;但其缺点是,业务调用与日志归集不是同时完成的,有可能业务调用已经结束,但日志归集不及时,导致追踪失真。

  • 基于服务的追踪:通过某些手段给目标应用注入追踪探针(Probe),然后通过探针收集服务调用信息并发送给链路追踪系统。探针通常被视为一个嵌入目标服务的小型微服务系统,具备服务注册、心跳检测等功能,并使用专用的协议将监控到的调用信息通过独立的 HTTP 或 RPC 请求发送给追踪系统。

    • 以 SkyWalking 的 Java 追踪探针为例,它实现的原理是将需要注入的类文件(追踪逻辑代码)转换成字节码,然后通过拦截器注入到正在运行的应用程序中。比起基于日志实现的追踪,基于服务的追踪在资源消耗和侵入性(但对业务工程师基本无感知)上有所增加,但其精确性和稳定性更高。现在,基于服务的追踪是目前最为常见的实现方式。

zipkin 的实现原理

zipkin 的核心数据模型

参考www.thebyte.com.cn/Observabili...

相关推荐
间彧14 分钟前
CAP定理:Partition tolerance(分区容错性)详解
后端
Python私教1 小时前
PyQt:用 Python 打造原生级桌面应用的强大框架
后端
Python私教1 小时前
用 PyQt 开发一个桌面计算器:从零到完整实战指南
后端
Mos_x1 小时前
Spring 中的 @ExceptionHandler 注解详解与应用
java·后端
爆爆凯1 小时前
Spring Boot Web上下文工具类详解:获取Request、Response和参数
前端·spring boot·后端
IT_陈寒1 小时前
7个Java Stream API的隐藏技巧,让你的代码效率提升50%
前端·人工智能·后端
绝无仅有1 小时前
大厂深度面试相关文章:深入探讨底层原理与高性能优化
后端·面试·架构
绝无仅有1 小时前
大厂真实面试指南:解答核心问题与技术深度探讨
后端·面试·架构
JaguarJack2 小时前
PHP 现代特性速查 写出更简洁安全的代码(中篇)
后端·php
Victor3563 小时前
Redis(104)Redis的最大数据量是多少?
后端