Google分布式链路追踪系统Dapper介绍

Google-Dapper

Dapper是谷歌内部使用的分布式链路追踪系统,虽然没有开源,但是Google在其2010年发布的一篇论文中对其进行了详细的介绍。可以说,Dapper是链路追踪领域的始祖,其提出的概念和理念一致影响着后来所有的分布式系统链路追踪系统,包括阿里的鹰眼系统,大众点评的cat系统,Twitter的Zipkin以及开源的Jaeger等等。

所以,在这里我们对Google的Dapper做一个介绍,文章内容主要来自于论文 Dapper, a Large-Scale Distribution Systems Tracing Infrastructures.

设计初衷

现代的大型应用系统一般是复杂的分布式系统,他们由许多的软件模块构成,这些软件模块可能由不同的团队用不同的编程语言编写而成,因此那些传统的用于理解系统行为,分析性能问题的工具,在这种复杂环境下变得失效。

设计理念

主要有三个设计目标:

  • 低负载(low overhead)
  • 应用级透明(application-level transparency)
  • 大范围部署(ubiquitous deployment)

额外的设计目标:使跟踪数据在收集后能够被尽快得用于分析

设计理念与 Magpie,X-Trace 相似,但是同时也有自己的关键点(key point),例如采样的使用和限制性能测量(instrumentation)在一个小范围的公共库里面。

分布式链路追踪

dapper-1_tree

上图展示了一个五台服务器的服务:一个前端A,两个中间件B喝C,以及两个后端D和E。对于请求X,目前来看,对于一个链路追踪系统,应该记录的有用信息有:

  • 每台服务器中发送和接受的消息的标志符(message identifiers)
  • 每台服务器中发送和接受的消息的带有时间戳的时间(timestamped events)

为了记录这些链路追踪信息,并且可以根据给定的初始请求(例如上图中的请求X)来找出所有与之相关的追踪信息条目,有两种解决方案可以供选择:

  • 黑箱方案(Black-box schemes)

    • 在黑箱方案中,假设我们除了以上记录的两种信息外,不会记录其他信息,然后我们使用统计回归技术来推断出追踪信息条目之间的关联。
  • 基于标注的方案(annotation-based schemes)

    • 在基于标注的方案中,我们依赖应用软件或者中间件来给每一条记录标注一个全局的标志符(global identifier)(同一条请求下发生的记录标注同样的标志符)(其实就是Trace ID),用此将同一条请求下发生的记录关联起来。

黑箱方案的特点:

  • 更轻便(portable)
  • 因为用到的是统计回归技术,因此需要足够多的数据,才能达到足够的准确性。

基于标注方案的特点:

  • 没有黑箱方案轻便好用,需要侵入程序的运行,因为需要加入相应的标注。
  • 准确率高,无需用统计回归技术进行推断。

Dapper使用的是基于标注的方案。在Google的环境中,因为所有的应用都是使用相同的线程模型(threading model),控制流(contro flow)和RPC系统,因此他们可以把代码植入限定在一小部分的公共库之中,从而实现对应用开发人员的透明性(application-level transparency)。

Dapper

  • trees
  • spans
  • annotations