链路追踪定义
链路追踪(Distributed Tracing)是一种用于监测和诊断分布式应用程序的技术,它允许开发人员跟踪一个请求在分布式系统中的完整路径和流程。
为什么需要链路追踪
随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路。
如下图所示:
以上的服务调用,链路过程非常复杂,就会出现:如何发现问题,如何追踪服务故障等难题。
而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。
链路追踪原理
链路追踪原理:主要是通过在每个组件中插入唯一的标识符(trace ID)来追踪请求,并将相关信息,比如:请求的起始时间、耗时、调用链路等记录下来。
这些信息可以帮助开发人员了解整个请求的流程,从而进行故障排除、性能优化和监控分析。
以下是链路追踪的一些核心概念和组成部分,如下图所示:
1.Trace(追踪)
一个完整的请求路径,包括了所有相关的组件和服务。
2.Span(跨度)
代表请求路径中的一个组件或服务的操作。每个Span都有一个唯一的ID,用于标识该操作,同时记录了一些关键的元数据,如开始时间、结束时间、执行耗时等。
3.Trace ID(追踪ID)
在整个链路中唯一标识一个追踪的ID,可以在各个组件间传递。
4.Span ID(跨度ID)
标识一个Span的ID,用于建立Span之间的父子关系。
5.Annotation(注解)
用于记录与Span相关的附加信息,如日志、事件、异常等。
6.Trace Context(追踪上下文)
包含了当前请求的追踪ID、跨度ID等信息,用于在不同组件间传递和关联追踪信息。
链路追踪框架
1.Zipkin
Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),能够收集服务间调用的时序数据,提供调用链路的追踪。
ZipKin可以分为两部分:
一部分是ZipKin Server:用来作为数据的采集存储、数据分析与展示。
一部分是ZipKin Client:基于不同的语言及框架封装的一些列客户端工具,这些工具完成了追踪数据的生成与上报功能。
整体架构如下:
Zipkin支持多种编程语言和框架,并可以与其他链路追踪工具集成。
2.Sleuth
Spring Cloud Sleuth 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。
Spring Cloud Sleuth采用的是Google的开源项目Dapper的专业术语,span、Trace、Annotations。
1)Span基本工作单元
每次发送一个远程调用服务就会产生一个 Span,Span通过一个64位ID唯一标识。
2)Trace
一个 Trace 认为是一次完整的链路,内部包含 n 多个 Span,Trace 和 Span 存在一对多的关系,Span 与 Span 之间存在父子关系。
3)Annotations
用来及时记录一个事件的存在,一些核心 annotations 用来定义一个请求的开始和结束。
3.Jaeger
Jaeger是一个开源的分布式跟踪系统,由CNCF(Cloud Native Computing Foundation)维护。
它支持多种编程语言和框架,并提供了灵活的API和可扩展性。Jaeger可以将跟踪数据存储在后端存储中,并提供Web界面用于查询和分析。
4.Pinpoint
Pinpoint是一个针对Java应用程序的分布式跟踪系统,可以帮助开发人员分析和优化分布式应用程序的性能,它提供了实时监控、调用链路跟踪和错误分析等功能。
以上就是链路追踪详解,更多微服务内容请查看:微服务最全详解(定义架构及框架应用)
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》