分布式链路追踪最全详解

本文涉及的产品
可观测链路 OpenTelemetry 版,每月50GB免费额度
简介: 分布式链路追踪最全详解

分布式链路追踪原理

分布式链路追踪的原理涉及多个关键概念和组件,如下图所示:

图片

主要会包含如下8大组件:

1.追踪(Trace)

追踪是一个请求在分布式系统中的全局视图,显示了请求从起始到终点的流程,一个追踪通常由多个分布式跨度(Span)组成。

2.跨度(Span)

跨度表示一个操作的时间片段,它记录了操作的开始和结束时间、操作名称、标签等信息。

例如:一个HTTP请求、数据库查询等都可以是一个跨度。

3.上下文传递(Context Propagation)

在分布式系统中,跨度之间需要共享上下文信息,以便正确地构建追踪。

上下文传递确保在请求跨越不同服务时,相关信息如请求ID、时间戳等能够被正确传递。

4.唯一标识

为了构建一个完整的追踪,每个跨度都需要一个唯一的标识符,这个标识符被用于关联不同跨度,构建一个完整的追踪视图。

5.采样(Sampling)

由于分布式追踪可能会产生大量的数据,采样是一种控制数据收集量的方法。通过采样,只有一部分请求和跨度会被记录,以减少资源消耗。

6.代理和收集器

在应用程序中嵌入追踪代理,它负责捕获应用程序中的跨度数据,这些代理将跨度数据发送到追踪收集器进行处理。

7.存储和索引

追踪收集器将跨度数据存储在后端的存储系统中,通常是分布式数据库或索引系统,这些存储系统用于存储、索引和检索跨度数据。

8.可视化界面

存储的跨度数据可以通过可视化界面进行查询和展示,开发人员和运维人员可以使用这些界面来查看请求路径、性能信息和问题定位。

分布式链路追踪系统

有许多分布式链路追踪系统和工具可以帮助实现这些原理。一些常见的分布式链路追踪系统包括:

1.Skywalking

SkyWalking和Zipkin一样,也是一个开源的应用性能监控和分析系统,在国内使用较多。

图片

主要功能:

  • 全链路追踪: SkyWalking 支持全链路追踪,可以追踪分布式系统中请求的流程路径。
  • 多语言支持: SkyWalking 提供多语言的客户端,包括:Java、Python、Go、.NET等。
  • 性能指标收集: 除了追踪数据,SkyWalking 还可以收集系统性能指标,比如:响应时间、吞吐量、错误率等。
  • 告警与通知: SkyWalking 允许设置警报规则,当性能或指标达到预定的阈值时,可以触发告警通知。

工作原理:

  • 代理和收集器: 在应用程序中嵌入 SkyWalking 代理,它会捕获请求中的跨度数据,并将数据发送到 SkyWalking 收集器。
  • 数据存储: SkyWalking 收集器将跨度数据存储在后端的存储系统中,通常是数据库或索引系统。这些存储系统用于存储、索引和检索跨度数据。
  • 可视化界面: 存储的跨度数据可以通过 SkyWalking 的可视化界面查询和展示。用户可以使用界面查看请求的路径、性能信息和指标图表。

2.Zipkin

Zipkin是一款开源的分布式实时数据追踪系统,Zipkin 是一个独立的开源项目,由Twitter开发并开源。

Zipkin 提供了可视化界面,用于查看请求的流程、跨度和时间线。

如下图所示:

图片

工作原理:

  • 代理收集数据: 在应用程序中嵌入 Zipkin 代理,它会捕获请求中的跨度数据,并将数据发送到 Zipkin 收集器。
  • 数据存储: Zipkin 收集器将跨度数据存储在后端的存储系统中,通常是数据库或索引系统。这些存储系统用于存储、索引和检索跨度数据。
  • 可视化界面: 存储的跨度数据可以通过 Zipkin 的可视化界面查询和展示。用户可以使用界面查看请求的路径、性能信息和时间线。

3.Sleuth

Sleuth是 Spring Cloud的链路追踪组件,也同样实现了分布式跟踪解决方案。

Sleuth主要是为Spring生态系统设计的,它提供了与Spring Boot和Spring Cloud的紧密集成,使开发人员能够更轻松地将分布式追踪添加到Spring应用中。

Zipkin和Sleuth都是用于实现分布式追踪的工具,但Sleuth更加专注于与Spring生态系统的集成,而Zipkin则更加通用,可以适用于多种语言和框架。

4.Jaeger

Jaeger 一个开源的分布式链路追踪系统,由CNCF维护,它支持跨度数据的收集、存储、索引和可视化。

5.PinPoint

Pinpoint 是一个开源的分布式应用性能监控工具,专注于跟踪和监控分布式应用程序和微服务架构的性能。

综上所述,分布式链路追踪是一个关键工具,用于分析分布式系统中的请求流程和性能。

通过构建完整的请求追踪,开发人员和运维人员可以更好地理解系统的工作方式,找出性能问题,并提供更好的用户体验。

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
6月前
|
存储 监控 数据可视化
链路追踪所需要了解的知识
【2月更文挑战第29天】链路追踪,或称调用链监控,用于记录跨服务的逻辑请求信息,协助开发者优化性能和定位问题。它捕获异常、错误和有价值的数据。
|
3月前
|
监控 Java 应用服务中间件
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
|
3月前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
6月前
|
存储 监控 Java
一文看懂分布式链路监控系统
本文通过阿里的Eagleeye(鹰眼)和开源的Skywalking,从数据模型、数据埋点以及数据存储三个方面介绍分布式链路监控系统的实现细节,其中将重点介绍Skywalking字节码增强的实现方案。
91556 6
|
6月前
|
存储 数据采集 消息中间件
初探分布式链路追踪(上)
初探分布式链路追踪(上)
155 2
|
6月前
|
存储 监控 Cloud Native
初探分布式链路追踪(下)
初探分布式链路追踪(下)
123 2
|
6月前
|
运维 监控 算法
面向全栈可观测的分布式链路追踪
全栈可观测App提供了一套完整的分析工具,从数据统计分析能力到数据关联,再到具备智能化和自动化特性的相关工具,以解决人们在可观测性方面所遇到的问题。未来,我们将持续提供更加丰富和强大的分析工具来满足用户的需求。
61250 6
|
存储 消息中间件 NoSQL
浅谈分布式链路追踪之Jaeger
随着微服务生态的盛行,在基于不同的业务场景中,一个简单的请求往往可能会涉及到多个不同服务类型,此时,若某个服务所提供的业务出现异常,从而可能会导致整个业务处理链路中的问题跟踪、定位及其分析较为困难,服务之间的依赖梳理、组件排查就变得尤为复杂。
1035 0
|
消息中间件 数据可视化 JavaScript
什么是链路追踪?分布式系统如何实现链路追踪?
什么是链路追踪?分布式系统如何实现链路追踪?
|
6月前
|
存储 机器学习/深度学习 缓存
链路追踪(Tracing)其实很简单——分布式链路追踪的挑战与限制
作者:夏明(涯海) 创作日期:2022-07-14 专栏地址:【稳定大于一切】【稳定大于一切】作为一门新兴技术,分布式链路追踪的技术演进史并不算长,仅有十数年。目前,它仍处于不断被探索、快速迭代的周期。为了更好的了解与应用分布式链路追踪技术,我们来看下它目前面临的几项关键挑战与限制。关键挑战与应对分...
126 0
链路追踪(Tracing)其实很简单——分布式链路追踪的挑战与限制