使用应用程序时,用户发起服务请求,不同的应用程序组件处理请求。
假设用户在在线电影预订应用程序中预订电影票。用户输入他们的联系方式、电影详细信息和付款信息,然后选择 “立即预订 ”。创建的请求将发送至:
微服务 A,用于验证用户输入的数据。
微服务 B,从 A 获取数据并在客户数据库中创建记录。
微服务 C,从 B 获取数据并验证付款。
微服务 D,从 C 获取数据,分配座位,并生成电影票数据。
微服务 E,从 D 获取数据并创建格式化的票证 PDF 文件。
然后,包含票证 PDF 的响应将从 E 到 D 再到 C 再到 B 再到 A 的微服务链向上返回,直到最终到达用户手中。上面的示例很简单——请求通常要经过数十个微服务,甚至是应用程序外部的第三方软件组件链。这使得该过程变得越来越复杂。
分布式跟踪系统跟踪服务请求与分布式计算环境中其他微服务和软件组件的这些交互。分布式跟踪表示时间线以及请求生成和响应接收之间发生的所有操作。软件团队使用跟踪功能,通过与初始请求交互的多个微服务来追踪数据的移动。
跨度
处理服务请求时,应用程序可能会执行多项操作。在分布式跟踪中,这些操作以跨度表示。例如,跨度可能是 API 调用、用户身份验证或启用存储访问权限。如果单个请求导致多个操作,则初始(或父级)跨度可能会分支为多个子跨度。父跨度和子跨度的这些嵌套层构成了为完成服务请求而采取的步骤的连续逻辑表示形式。
跟踪 ID
分布式跟踪系统为每个请求分配一个唯一的 ID,以便对其进行跟踪。每个跨度都从其所属的原始请求中继承相同的跟踪 ID。跨度还使用唯一的跨度 ID 进行标记,这有助于跟踪系统整合其收集的元数据、日志和指标。
指标收集
当每个跨度都经过不同的微服务时,它会附加指标,为开发人员提供对软件行为的深入而精确的见解。您可以使用跨度收集错误率、时间戳、响应时间和其他元数据。跟踪完成整个周期后,分布式跟踪工具将合并收集的所有数据。
例如,根据响应时间、错误状态以及由多个第三方服务实现的辅助功能的故障对 API 调用进行评估。跟踪工具将数据转换为可视化形式,突出显示关键指标和性能摘要。这样,站点可靠性工程师可以快速识别错误、检查关键数据元素,并与开发团队合作,以修复性能问题并确保遵守服务级别协议 (SLA)。