作为可观测性体系之一的分布式追踪一直是一个备受争议的话题。作为过去每届 全球知名大会 KubeCon
以及国内各种技术峰会所扯的老牌技术,曾一度被寄予厚望,被认为会彻底改变系统观测认知。然而,五年已经过去了。。。
一、什么是 Distributed Ttracing ?
通常来讲,分布式跟踪是一种在分布式系统和微服务中传播的请求,生成有关这些请求的高质量数据,并使其可供分析的方法。
分布式追踪(Distributed
Tracing)是一种用于监测分布式系统中请求流程的技术。它可以追踪一个请求在不同的微服务中的执行情况,并将这些信息整合到一个完整的请求链路图中,以便于监测和调试。分布式追踪通常通过在请求的不同阶段插入唯一的标识符(例如
Trace ID 和 Span ID 等)来实现。这些标识符随着请求的传递,会在不同的微服务之间传递,用于标记请求的不同阶段,从而构建完整的请求链路图。
分布式跟踪对于监控、调试和优化分布式软件架构至关重要,特别是在动态微服务架构中,因为它有助于团队更快地了解每个微服务的性能。
二、分布式追踪的工作原理
分布式跟踪的工作原理是跟踪通过分布式系统的请求流,并在请求通过各种服务和组件时收集有关请求每个步骤的数据。
然后,该数据用于构建请求过程(从初始请求到最终响应)的完整画面。
为了实现这一点,分布式跟踪通常依赖于使用唯一标识符,例如跟踪 ID 和跨度 ID,这些标识符附加到每个请求,并在请求遍历不同服务时通过系统传递。
这些标识符允许跟踪系统将请求的每个步骤与整个请求链关联起来,即使它通过不同的服务和组件也是如此。
在典型的分布式跟踪系统中,通常由三个主要组件组成:追踪代理(Tracing Agent)、追踪收集器(Tracing
Collector)和追踪存储(Tracing Storage)三个主要组件协同工作来跟踪请求
1、追踪代理
作为在分布式系统中的每个服务或组件上运行的软件组件,追踪代理主要负责收集有关通过它们的请求的数据。 追踪代理通常将跟踪和跨度 ID
添加到请求标头,并将此信息发送到追踪收集器。
2、追踪收集器
追踪收集器组件从跟踪代理接收追踪数据并将其聚合成完整的请求跟踪,然后负责关联不同服务和组件之间的追踪和跨度 ID,以构建请求旅程的完整画面。
3、追踪存储
追踪存储组件为存储追踪数据以供以后检索和分析的组件,主要用于诊断问题、优化性能并深入了解分布式系统的整体行为。
三、为什么我们的系统需要分布式追踪?
分布式追踪在实际业务场景中通常是独一无二的,因为它专注于请求作为可观察性的单元。在监控和度量平台中,通常以组件(如服务和主机)作为被观察的基本单位。这些平台可以提供有关整个组件随时间的行为的信息,例如在特定时间范围内该服务的健康状况、吞吐量和错误率。
相比之下,日志的被观察单位是事件。例如,当代码执行期间出现事件时,可以打印一些信息。这些事件是开发人员在编写代码时主观定义的。然而,日志的挑战在于它们通常是脱节的,每个组件都单独打印自己的日志消息,没有简单的方法将它们连接在一起,以便形成有意义的整体视图。
相对地,分布式追踪的被观察单位是单个请求,因为它在多个组件之间遍历。这使得我们能够对整个分布式系统进行查询,并了解在一个复杂、互联的系统中发生了什么。这种可观察性的单元使分布式追踪成为了一种强大的工具,可以帮助开发人员快速诊断问题、优化性能和改进可维护性。
通常而言,借助分布式追踪,我们能够实现:
1、快速诊断
分布式应用程序通常由多个服务和组件组成,当出现问题时,需要快速定位问题所在,并诊断问题的根本原因。分布式追踪可以帮助开发人员快速诊断问题,因为它提供了详细的请求链路信息,可以直接指出问题所在。
2、改进可维护性
分布式追踪可以提供应用程序的全面视图,包括不同服务和组件之间的相互作用。这有助于开发人员更好地理解应用程序的结构和功能,并改进其可维护性。
3、理解系统
现代应用程序通常由多个服务和组件组成,这些服务和组件之间的相互作用非常复杂。分布式追踪可以提供完整的请求链路信息,并帮助开发人员了解系统中不同组件之间的相互作用,从而更好地理解系统的行为和性能。
一句话总结:
“分布式跟踪的基本情况在于,围绕请求的这种方向最接近最终用户的体验。因此,对于我们如何检查和排除分布式架构的故障来说,这也是最直观的。”
四、今天,分布式追踪所面临的问题?
在实际的业务场景中,分布式追踪在企业的落地及应用往往因为各种各样的因素导致面临各种问题,具体如下:
1、实施艰难
实施分布式追踪可能会面临一些挑战。为了实现分布式追踪,我们需要对代码进行修改和发布。虽然代码修改是实现可观察性的共同要求,但是分布式追踪的挑战在于,为了获得分布式追踪,每个服务或组件都需要进行工具化,否则跟踪将中断。
这意味着在实施分布式追踪之前,我们需要对每个服务或组件进行仪器化,以便收集有关请求的跟踪信息,并将其传递给追踪系统。这可能需要一些额外的工作,包括修改现有代码、添加新的跟踪代码和重新部署应用程序。此外,由于每个服务或组件都需要进行仪器化,这可能会导致一些复杂性和维护成本的增加
2、价值削弱
尽管分布式跟踪在分布式系统中的可观察性和问题排查方面有很大的优势,但在某些情况下,分布式跟踪的价值可能会被削弱,最大的障碍在于高昂的成本。实施分布式跟踪需要对每个服务和组件进行工具化,这可能会导致额外的成本和复杂性。如果在实施分布式跟踪之前没有考虑好成本和收益,那么分布式跟踪的价值可能会被削弱
第二个在于团队的技术储备,团队的技术储备对实施分布式追踪的影响是十分重要的。实施分布式追踪需要对分布式系统进行仪器化,以便收集请求的跟踪信息,并将其传递给追踪系统。这需要对现有代码进行修改,并添加新的跟踪代码,并且需要在不影响系统功能的情况下进行部署。如果团队缺乏实施分布式追踪所需的技术储备,那么实施分布式追踪可能会变得困难。
3、复杂的抽样决策
在实施分布式追踪时,抽样决策是一个重要的考虑因素。由于分布式追踪会产生大量的跟踪数据,因此需要采用抽样技术来减少数据量,以避免存储和处理方面的问题。但是,抽样决策的复杂性会影响实施分布式追踪的效果,主要涉及抽样决策的准确性、复杂性以及一致性。
抽样决策的准确性直接影响到跟踪数据的质量。如果抽样决策过于简单或不准确,那么可能会忽略重要的请求路径,导致无法正确诊断问题。
抽样决策的复杂性也会影响到实施分布式追踪的效果。如果抽样决策过于复杂,那么可能会增加实施分布式追踪的难度,导致实施时间和成本的增加。
在分布式系统中,不同服务和组件可能会使用不同的抽样策略,这可能会导致跟踪数据的不一致性。如果不同组件使用不同的抽样策略,那么可能会导致跟踪数据的缺失或重叠,从而影响跟踪数据的质量。
当然,除了上面核心的因素外,还有其他可观因素,此处咱不赘述。
五、未来,分布式追踪如何发力?
随着分布式系统的普及和应用场景的增多,分布式追踪的未来发展前景非常广阔。分布式追踪将成为分布式系统可观测性的核心工具之一,并且将在以下方面发挥更大的作用:
1、自动化:随着人工智能和机器学习技术的发展,分布式追踪将越来越自动化。例如,可以使用机器学习来自动识别异常行为和性能问题,并提供自动化的问题排查和修复建议。
2、效率:分布式追踪将成为分布式系统管理的重要工具之一。通过对系统的全面监控和诊断,分布式追踪能够提高系统的效率和稳定性,并减少故障排查的时间和成本。
3、安全:分布式追踪将成为安全领域的重要工具之一。通过监控和分析请求的路径和数据流,分布式追踪能够识别潜在的安全漏洞和攻击,并提供及时的响应和修复建议。
4、标准化:分布式追踪将越来越标准化,以便不同供应商和厂商的系统可以无缝地集成和互操作。例如,OpenTelemetry
就是一个流行的开放标准,用于实现分布式追踪和度量。
总之,分布式追踪的未来发展前景非常广阔。随着技术的进步和需求的增长,分布式追踪将成为分布式系统可观察性的核心工具之一,并在自动化、效率、安全和标准化等方面发挥更大的作用。