Dapper是谷歌内部使用的分布式链路追踪系统,虽然没有开源,但是Google在其2010年发布的一篇论文中对其进行了详细的介绍。可以说,Dapper是链路追踪领域的始祖,其提出的概念和理念一致影响着后来所有的分布式系统链路追踪系统,包括阿里的鹰眼系统,大众点评的cat系统,Twitter的Zipkin以及开源的Jaeger等等。
所以,在这里我们对Google的Dapper做一个介绍,文章内容主要来自于论文 Dapper, a Large-Scale Distribution Systems Tracing Infrastructures.
现代的大型应用系统一般是复杂的分布式系统,他们由许多的软件模块构成,这些软件模块可能由不同的团队用不同的编程语言编写而成,因此那些传统的用于理解系统行为,分析性能问题的工具,在这种复杂环境下变得失效。
主要有三个设计目标:
额外的设计目标:使跟踪数据在收集后能够被尽快得用于分析
设计理念与 Magpie,X-Trace 相似,但是同时也有自己的关键点(key point),例如采样的使用和限制性能测量(instrumentation)在一个小范围的公共库里面。
上图展示了一个五台服务器的服务:一个前端A,两个中间件B喝C,以及两个后端D和E。对于请求X,目前来看,对于一个链路追踪系统,应该记录的有用信息有:
为了记录这些链路追踪信息,并且可以根据给定的初始请求(例如上图中的请求X)来找出所有与之相关的追踪信息条目,有两种解决方案可以供选择:
黑箱方案(Black-box schemes)
基于标注的方案(annotation-based schemes)
Trace ID
),用此将同一条请求下发生的记录关联起来。黑箱方案的特点:
基于标注方案的特点:
Dapper使用的是基于标注的方案。在Google的环境中,因为所有的应用都是使用相同的线程模型(threading model),控制流(contro flow)和RPC系统,因此他们可以把代码植入限定在一小部分的公共库之中,从而实现对应用开发人员的透明性(application-level transparency)。