原创

分布式链路追踪

温馨提示:
本文最后更新于 2023年07月21日,已超过 489 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

分布式链路追踪

随着分布式系统和微服务架构的出现,一次用户的请求会经过多个系统,不同服务之间的调用关系十分

复杂,任何一个系统出错都可能影响整个请求的处理结果。以往的监控系统往往只能知道单个系统的健

康状况、一次请求的成功失败,无法快速定位失败的根本原因。

Trace 的概念 

一个trace代表了一个事务或者流程在(分布式)系统中的执行过程。实际的分布式系统中会包含很多的组件和内容。

这种展现方式增加显示了执行时间的上下文,相关服务间的层次关系,进程或者任务的串行或并行调用关系。这样的视图有助于发现系统调用的关键路径。通过关注关键路径的执行过程,项目团队可能专注于优化路径中的关键位置,最大幅度的提升系统性能。例如:可以通过追踪一个资源定位的调用情况,明确底层的调用情况,发现哪些操作有阻塞的情况

Trace:贯穿一个分布式系统的事务追踪描述,其实就是由许多个Span组成的有向无环图。

Span:被命名的与记录时间的调用操作,如一个Http GET请求;Span有嵌套关系,如果一个请求会调用其它服务,就会生成子Span。

Tag:一组由键值对构成的标签集合,键值类型必须为字符串。它可以带上许多有用信息,如请求方法、请求URL、返回状态码等。

Log:一组Span的日志集合。

Tracing 是在90年代就已出现的技术。但真正让该领域流行起来的还是源于 Google 的一篇论文"Dapper, a Large-Scale Distributed Systems Tracing Infrastructure",而另一篇论文"Uncertainty in Aggregate Estimates from Sampled Distributed Traces"中则包含关于采样的更详细分析。论文发表后一批优秀的 Tracing 软件孕育而生,比较流行的有:

  • Dapper(Google) : 各 tracer 的基础
  • StackDriver Trace (Google)
  • Zipkin(twitter)
  • Appdash(golang)
  • 鹰眼(taobao)
  • 谛听(盘古,阿里云云产品使用的Trace系统)
  • 云图(蚂蚁Trace系统)
  • sTrace(神马)
  • X-ray(aws)

分布式追踪系统发展很快,种类繁多,但核心步骤一般有三个:代码埋点,数据存储、查询展示。

下图是一个分布式调用的例子,客户端发起请求,请求首先到达负载均衡器,接着经过认证服务,计费服务,然后请求资源,最后返回结果。

Dapper要解决的问题

  • 分布式系统服务很多,很复杂
  • 每个服务由不同的组开发,没有一个人能够理解所有的系统
  • 每个服务由不同的语言开发
  • 可能会涉及到上千台机器
  • 需要一个服务去跟踪请求,理解整体系统的瓶颈和实时的表现,如果一个请求太慢,如何快速的找到问题所在。

  • 设计目标
  • 效率要高
  • 对服务性能影响小
  • 对应用透明,侵入性小
  • 服务开发者不需要知道跟踪系统的存在
  • 能够大规模部署
  • 实时监控系统
  • 数据收集到数据展示之间时间尽量少(最好少于1分钟)。快速调试线上问题

5这一问题在Tracing领域尤其凸显,Tracing的目的就是把系统中所有的模块和组件的交互通过Trace ID完全串联起来,如果某些组件Trace格式不统一,那这部分组件内部的调用记录就会断掉,Trace完全发挥不出价值。所以最开始的时候有了OpenTracing规范,OpenTracing定义了Trace的数据格式,各家公司可以基于这个标准去实现,基于不同实现的组件最终结合时可以完全兼容

1、统一SDK:OpenTelemetry为每个常见语言都实现了对应的SDK,未来我们的系统中只需要一个SDK就可以记录三种可观察性数据。

2、自动代码注入技术:OpenTelemetry也开始提供可以自动代码注入的实现,目前已经支持Java各类主流框架的自动注入。
3、厂商无关性:OpenTelemetry提供了Collector用于收集各个SDK发送的数据并支持对接到各种后端存储系统。
4、云原生:OpenTelemetry设计之初就已经考虑了云原生的特性,并且还提供了Kubernetes Operator用于快速部署使用

APM (Application Performance Management) 即应用性能管理系统,是对企业系统即时监控以实现

对应用程序性能管理和故障管理的系统化的解决方案。应用性能管理,主要指对企业的关键业务应用进

行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本。

APM系统是可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和

解决问题。

而 OpenTracing 就完美的解决了这个问题,OpenTracing 通过提供平台无关、厂商无关的 API,帮助开发人员能够方便地添加(或更换)追踪系统。

正文到此结束