微服务架构的分布式跟踪是一个新兴概念,它在基于互联网的商业组织中将会得到更广泛的应用。
微服务架构引入了一种全新的方式来扩展具有多个独立服务的应用程序。与单体架构相比,它确实有助于提高弹性、可扩展性、生产力、效率。
然而,其自身也带来一些复杂性,例如难以追踪错误或监控整个基础设施的流量。 因此,为了消除这些复杂性,很多组织采用了分布式跟踪方法。这种方法有助于解决高级调试问题并提高网络中的可见性。它还通过缩小端到端延迟、特定服务或功能等当前所遇到的错误为开发人员提供支持。
本文旨在介绍分布式跟踪方法及其对微服务架构的影响。
分布式追踪的解释
可观察性是在细粒度级别上监控基础设施的行为。这有助于最大限度地提高基础设施内部的可见性,并支持事件管理团队维护微服务架构的可靠性。
可观察性是通过以各种形式(工具)记录系统数据来实现的,例如指标、警报(事件)、日志和跟踪。这些功能有助于深入了解基础设施的内部健康状况。在这里对跟踪的重要性以及它如何演变为分布式跟踪进行分析。
1.跟踪
跟踪是对应用程序流程和数据进展的持续监督,通常代表一个用户通过应用程序堆栈的行程轨迹。这些使整个系统的行为和状态更加明显和易于理解。分布式请求跟踪是一种具有可观察性的进化方法,有助于保持云计算应用程序的良好运行状况。
分布式跟踪是跟踪事务请求并记录贯穿微服务架构路径的所有相关数据的过程。它用于跨行业以结构化的格式检查和可视化跟踪。这种数据跟踪方法有助于SRE/DevOps团队快速了解和检查导致基础设施中出现异常的技术故障。
这可以通过使用诸如OpenTelemetry(跨云原生应用程序可观察性的标准化框架)之类的工具来完成,该工具被认为是一种供应商中立的跟踪方法。
2.为什么需要分布式跟踪?
在2018年进行的一项研究表明,63%的传统组织正在将其设施更改为微服务架构。由于从单体架构到微服务架构的重大转变,在高度分布式系统中进行数据跟踪的需求变得更加明显。这种分布式跟踪极大地减少了具有细粒度可观察性功能的监控系统中的常见挑战。
以一个互动社交游戏平台为例,该平台在世界各地拥有数以百万的用户。当这些用户在平台中输入某些偏好数据时,该平台必须快速处理数据并提供适当的结果。在这里,分布式跟踪在捕获每个用户的请求、各种微服务处理这些请求并在很短的时间内交付预期结果方面起着至关重要的作用。
以下了解分布式跟踪如何帮助这个社交游戏平台基础设施处理的一些问题。
其中一些功能包括:
提供跨基础设施的端到端可见性。
在上述这个游戏平台中,分布式追踪将跟踪用户位置和用户数据并将其存储在系统中。它遵循用户请求并记录与之相关的所有必要数据。通过这种功能,该平台将在其架构内实现端到端的可见性。
提供有关服务依赖性的信息。
微服务环境中的每个服务在完成用户请求时将相互依赖。在这里,当游戏玩家更新他们的状态时,它将通过访问中央服务器和架构内的各种其他基于位置的节点来与其他游戏玩家通信以完成这个任务。因此,每个服务请求都会提供其他相关服务的信息。
在系统遇到故障时确保具备弹性。
考虑游戏平台中的应用程序中的购买功能,该功能由于用户凭据无效而失败。通过分布式跟踪,开发人员可以轻松识别支付门户的API流程跟踪以纠正问题,而无需搜索各种日志。通过使用必要的网络数据记录每笔交易,可以节省大量时间。
3.分布式跟踪如何工作?
在研究如何在用户请求期间执行分布式跟踪之前,先了解一些基本术语。
请求(Request):这个术语表明各种云计算应用程序、微服务和其他功能如何相互通信。
跨度(Span):跨度将告知一个服务在一定时间间隔和相应的元数据方面所做的工作。这些是跟踪的基本构建块。
跟踪(Trace):这意味着由单个或多个跨度组成的端到端用户请求。
标签(Tag):这些是与每个跨度(沿路径记录)相关联的信息(元数据),提供跨度期间执行的操作的详细概述。
而一个跟踪包含一系列带有关联标签的跨度。
以下讨论分布式跟踪如何处理一个请求。
(1)当最终用户开始与系统和应用程序交互时,分布式跟踪过程就会开始。例如,如果新用户注册交互式移动游戏平台,需要输入电子邮件ID和设置密码。
(2)现在,每个用户请求都被转换成一个HTTP请求,并被分配一个唯一的跟踪ID(全局 ID)。在这里,用户数据将被提取并分配一个唯一的ID。
(3)当请求通过主机系统时,每个系统操作都被视为一个跨度,子操作被视为一个子跨度。跟踪的第一个跨度也称之为根跨度。在这个示例中,电子邮件ID将是根跨度,密码将是子跨度。
(4)每一个用户操作都被标记了三个ID:
请求跟踪ID,
根跨度ID,
子跨度ID。
(5)最终用户 (跨度) 的每个唯一请求都使用有关处理请求的所有信息(标签)进行编码。这些数据包括:
处理用户请求的微服务的名称和地址。
执行请求时与进程相关的事件和日志的场景。
查询和筛选请求标签,通过其会话ID、数据库主机、HTTP方法和各种其他关键标识符指示请求。
有关系统在处理请求时遇到故障时的错误消息和堆栈跟踪的信息。
现在,所有这些处理过的数据都将附加一个全局ID,其中包含有关跟踪从源到目的地的路径的相关信息。
最后,用户请求行程中跟踪的所有信息存储在相应的数据存储设施中。在这个游戏平台中,数据将存储在后端服务器的数据库层中,以供将来参考。
4.分布式跟踪工具的类型
此外,还有一些用于跨架构执行分布式跟踪的工具,这些工具可以划分为以下三个子类别:
(1)代码跟踪工具:在计算机程序(代码)执行过程中进行跟踪。这些工具有助于跟踪每一行代码、声明的变量、使用的条件语句、迭代函数,并最终交付预期的代码输出。这些对于代码分析和诊断目的有很大帮助。代码跟踪工具的一些示例包括OpenTracing、OpenZipkin和Appdash。
(2)数据跟踪工具:在使用源系统验证关键数据元素 (CDE) 或遥测数据期间执行跟踪,并使用统计过程控制 (SPC) 方法对其进行监控。数据跟踪工具的一些示例是Datadog、Jaeger、New Relic、Dynatrace和Lightstep。
(3)程序(进程)跟踪工具:在应用程序执行过程中建立跟踪操作。包含执行指令的索引和执行期间引用的数据的跟踪。这些被开发人员大量用于调试目的。这些工具的一些示例包括Strace、Ltrace、Opensnoop和Valgrind Lackey。
如何开始对基础设施进行分布式跟踪?
以下列出了一些有助于在微服务架构中开始分布式跟踪的链接。
要在架构中实施分布式跟踪,按照相关步骤,OpenTelemetry (OpenTracing + OpenCensus)。
拥有跨Docker本地运行Jaeger的组织可以按照Jaeger文档中提到的步骤进行操作。
如果采用Java或Docker配置基础设施,按照相关步骤在基础设施中应用OpenZipkin。
要为微服务架构应用分布式跟踪模式,可以参阅分布式跟踪模式。
跨基于微服务的Web应用程序实施分布式跟踪,例如IBM Garage方法。
要沿网络路径跟踪系统请求并了解系统未按预期工作的原因,需要了解分布式跟踪指南。
要了解微服务架构及其使用分布式跟踪的行为,需要了解使用分布式跟踪的微服务。
因此,通过执行或实践上述策略,可以跨任何微服务架构实现分布式跟踪系统。
随着分布式跟踪越来越多地采用,也面临一些随之而来的挑战。为了保持可靠性,应该在实现这些功能的同时保持最佳实践。
在微服务架构中采用分布式跟踪的最佳实践:
实施端到端检测并记录所有入站和出站服务调用的跟踪。
关注SRE信号,例如延迟、流量、错误和饱和(利用率)以及RED(响应、错误和持续时间)指标,以便在记录所有系统跟踪的同时对它们设置警报,并关注研究系统行为的持续时间指标。
始终遵循OpenTelemetry(OpenTracing+OpenCensus)标准化并确保采用的工具符合全球标准。
记录所有定制的业务指标和跟踪范围以备将来参考。
结论
分布式跟踪是一种监控微服务架构的有效技术。它提供了有关网络路径的更精确的数据和信息。通过采用标准化的分布式跟踪工具以及SRE信号指标的端到端检测,可以克服实施过程中的挑战。