什么是分布式跟踪?

分布式跟踪是观察数据请求流经分布式系统的过程。现代微服务架构通常具有多个小型独立组件,这些组件使用 API 不断通信和交换数据,以完成复杂的工作。通过分布式跟踪,开发人员可以跨不同的微服务跟踪或直观地跟踪请求路径。这种可见性有助于排查错误或者修复故障和性能问题。

分布式跟踪有哪些好处?

软件开发人员可以在几乎任何云原生环境中实施分布式跟踪系统,并记录云应用程序生成的分布式跟踪。此外,跟踪工具支持多种编程语言和软件堆栈,使软件团队能够在同一平台上监控和收集不同应用程序的性能数据。 

开发团队使用分布式跟踪来提高可观测性,并解决传统软件调试和监控工具无法解决的性能问题。 

以下是分布式跟踪的更多好处。

加快软件故障排除

现代应用程序依靠大量微服务来跨分布式系统交换数据并满足服务请求。对基于微服务的架构中的性能问题进行故障排除比在整体式软件应用程序中进行故障排除要困难得多。与整体式应用程序不同,特定软件问题的根本原因可能并不明显——多个软件模块之间的重叠和复杂交互可能使诊断问题变得困难。 

通过分布式跟踪,软件团队可以监控通过连接各种微服务和数据存储的复杂路径传递的数据。使用分布式跟踪工具,软件团队可以精确地跟踪请求并可视化数据传播路径。软件团队可以及时解决性能问题,并最大限度地减少服务中断。 

改善开发人员协作

通常,由多个开发人员参与构建云应用程序,每个开发人员负责一项或多项微服务。如果开发人员无法跟踪微服务交换的数据,软件开发过程就会减速。借助分布式跟踪系统,开发人员可以通过为微服务发出的每个服务请求提供遥测数据(例如日志和跟踪)来进行协作。开发人员可以准确地响应在测试和生产过程中发现的错误和其他软件问题。 

缩短上市时间

部署分布式跟踪平台的组织可以简化和加快为最终用户发布软件应用程序的工作。软件团队审查分布式跟踪以获得洞察力,从而加快软件开发、最大限度地降低开发成本、了解用户行为并提高市场准备程度。 

分布式跟踪有哪些不同类型?

软件团队使用分布式跟踪工具来监控、分析和优化应用程序。

代码跟踪

代码跟踪是一个软件进程,用于在执行特定功能时检查应用程序中的源代码流。它可以帮助开发人员了解代码的逻辑流程并识别未知问题。例如,开发人员使用代码跟踪来验证服务请求是否调用查询数据库的步骤。如果某些软件功能无法响应,跟踪系统将收集相应的错误状态并提醒注意响应时间。 

程序跟踪

程序跟踪是一种开发人员可以检查活动应用程序调用的指令和变量地址的方法。当软件应用程序运行时,它会处理驻留在特定分配的内存空间中的每一行代码。该应用程序还处理存储在机器内存中的变量。如果没有自动化工具,检查程序和数据存储器的变化是具有挑战性的。通过程序跟踪,软件团队可以诊断根深蒂固的性能问题,例如内存溢出、过度消耗资源和阻塞逻辑操作。 

端到端跟踪

通过端到端追踪,开发团队可以跟踪服务请求路径上的数据转换。当应用程序发起请求时,它会将数据发送到其他软件组件进行进一步处理。开发人员使用跟踪工具来跟踪和编译关键数据端到端发生的变化。它提供了以应用程序为中心的流经应用程序的请求视图。

端到端分布式跟踪在微服务架构中的工作原理是什么?

使用应用程序时,用户发起服务请求,不同的应用程序组件处理请求。 

假设用户在在线电影预订应用程序中预订电影票。用户输入他们的联系方式、电影详细信息和付款信息,然后选择立即预订。创建的请求将发送至:

  • 微服务 A,用于验证用户输入的数据。
  • 微服务 B,从 A 获取数据并在客户数据库中创建记录。
  • 微服务 C,从 B 获取数据并验证付款。
  • 微服务 D,从 C 获取数据,分配座位,并生成电影票数据。
  • 微服务 E,从 D 获取数据并创建格式化的票证 PDF 文件。

然后,包含票证 PDF 的响应将从 E 到 D 再到 C 再到 B 再到 A 的微服务链向上返回,直到最终到达用户手中。上面的示例很简单——请求通常要经过数十个微服务,甚至是应用程序外部的第三方软件组件链。这使得该过程变得越来越复杂。

分布式跟踪系统跟踪服务请求与分布式计算环境中其他微服务和软件组件的这些交互。分布式跟踪表示时间线以及请求生成和响应接收之间发生的所有操作。软件团队使用跟踪功能,通过与初始请求交互的多个微服务来追踪数据的移动。 

跨度

处理服务请求时,应用程序可能会执行多项操作。在分布式跟踪中,这些操作以跨度表示。例如,跨度可能是 API 调用、用户身份验证或启用存储访问权限。如果单个请求导致多个操作,则初始(或父级)跨度可能会分支为多个子跨度。父跨度和子跨度的这些嵌套层构成了为完成服务请求而采取的步骤的连续逻辑表示形式。

跟踪 ID

分布式跟踪系统为每个请求分配一个唯一的 ID,以便对其进行跟踪。每个跨度都从其所属的原始请求中继承相同的跟踪 ID。跨度还使用唯一的跨度 ID 进行标记,这有助于跟踪系统整合其收集的元数据、日志和指标。 

指标收集

当每个跨度都经过不同的微服务时,它会附加指标,为开发人员提供对软件行为的深入而精确的见解。您可以使用跨度收集错误率、时间戳、响应时间和其他元数据。跟踪完成整个周期后,分布式跟踪工具将合并收集的所有数据。 

例如,根据响应时间、错误状态以及由多个第三方服务实现的辅助功能的故障对 API 调用进行评估。跟踪工具将数据转换为可视化形式,突出显示关键指标和性能摘要。这样,站点可靠性工程师可以快速识别错误、检查关键数据元素,并与开发团队合作,以修复性能问题并确保遵守服务级别协议 (SLA)。

什么是分布式跟踪标准?

分布式跟踪标准为开发人员提供了通用框架和软件工具。这些标准监控、可视化和分析现代应用程序环境中的服务请求。通过标准化分布式跟踪工作流程,软件团队可以检测请求跟踪,而不会受到供应商锁定的影响。 

以下各部分介绍了在执行分布式跟踪时为实现互操作性而引入的标准。

OpenTracing

OpenTracing 是由云原生计算基金会 (CNCF) 开发的开源分布式跟踪标准。OpenTracing 专注于使开发人员能够使用 Instrumentation API 生成跟踪。这允许开发人员从代码库、库或其他依赖关系的不同部分生成分布式跟踪。

OpenCensus

OpenCensus 由多语言库组成,这些库能够提取软件指标并将其发送到后端系统进行分析。开发人员可以使用提供的 API 来管理跟踪的生成和收集方式。与 OpenTracing 不同,开发人员从单个项目存储库而不是单个代码库和库使用 OpenCensus。 

OpenTelemetry

OpenTelemetry 将 OpenTracing 和 OpenCensus 统一。它结合了两种标准的最佳功能,提供了一个全面的分布式跟踪框架。OpenTelemetry 提供了丰富的软件开发工具包、API、库和其他检测工具,可更轻松地实现分布式跟踪。 

分布式跟踪和日志记录有什么区别?

日志记录是一种记录应用程序运行时发生的特定事件的做法。日志记录工具收集带有时间戳的事件,例如系统错误、用户交互、通信状态和其他指标,以帮助开发团队检测系统异常。通常,有两种类型的日志记录: 

  • 集中式日志记录收集所有记录的活动,并将其存储在单个位置。
  • 分布式日志记录将日志文件存储在云上的不同位置。 

这两种记录方法都提供了事件的静态概览,向开发人员展示了应用程序中发生的情况。相比之下,分布式跟踪提供审计跟踪记录,通过关联在整个服务请求期间收集的各种遥测数据来阐明事件发生的原因。分布式跟踪可以使用日志记录和其他数据收集方法来跟踪特定的服务请求。 

分布式跟踪面临哪些挑战?

分布式跟踪简化了开发人员在诊断、调试和修复软件问题方面的工作。尽管如此,软件团队在选择跟踪工具时仍必须注意以下挑战。

手动仪表

一些跟踪工具需要软件团队手动检测其代码以生成必要的跟踪。当开发人员修改代码以跟踪请求时,存在影响生产版本的编码错误风险。此外,缺乏自动化使跟踪变得复杂,导致延迟,并可能导致数据收集不准确。 

前端覆盖范围有限

如果开发人员的跟踪工具仅限于后端分析,则他们可能无法完全监督性能问题。在某些情况下,分布式跟踪系统只有在第一个后端服务收到请求时才开始收集数据。这意味着开发人员无法在相应的用户会话期间检测和检查前端服务产生的问题。

随机抽样

某些工具不允许软件团队确定跟踪的优先级,从而将可观测性限制为随机采样的跟踪。由于示例数据有限,组织需要额外的软件故障排除方法来捕获跟踪工具遗漏的重大问题。 

AWS 如何帮助您满足分布式跟踪需求?

AWS X-Ray 是一个分布式跟踪平台,可帮助软件开发人员跟踪用户请求并识别其云应用程序中的瓶颈。组织使用 X-Ray 来可视化应用程序指标并提高工作负载可用性。借助 AWS X-Ray,您可以:

立即创建账户,开始在 AWS 上使用分布式跟踪。

AWS 上的后续步骤

查看其他与产品相关的资源
使用最全面的容器服务组合加速创新 
注册免费账户

立即享受 AWS 免费套餐。

注册 
开始在控制台中构建

在 AWS 管理控制台中开始构建。

登录