dapper是通过trace tree和span构建跟踪系统的。
span
这里写图片描述
span是用用于记录一个服务调用的过程的结构,一个典型的跟踪系统中,一次RPC调用会对应到一个的span上,dapper中定义了span相关的如下信息:
span名称:用于记录span的名称
spanid:用于记录span的Id,一般用全局唯一的64位整数表示
父spanid:父span的spanid,用于描述跟踪树结构
事件信息:cs/cr/sr/ss四种事件类型,span不同的事件类型对应不同的时间戳,根据这些时间戳,可计算出不同阶段的耗时信息。
annotation:一般,事件信息在annotation中存放,另外自定义的信息也可以与之关联
缩写 全称 说明
cs client send 客户端/消费者发起请求
cr client receive 客户端/消费者接收到应答
sr server receive 服务端/生产者接收到请求
ss server send 服务端/生产者发送应答
trace tree
一个请求可能跟多个服务调用关联,每次服务的调用与一个span进行关联,而span之间通过父spanid进行连接,这样所组成的一个树形结构就是所谓的跟踪树,这个结构显示体现了某一请求的服务调用链的状况
Dapper的实现
工具名称 提供商 类型 源码地址
Zipkin twitter 开源 https://github.com/openzipkin/zipkin
pinpoint naver 开源 https://github.com/naver/pinpoint
appdash sourcegraph 开源 https://github.com/sourcegraph/appdash
cat 大众点评 开源 https://github.com/dianping/cat
hydra 京东 开源 https://github.com/odenny/hydra
鹰眼 阿里 闭源 -
oneAPM oneapm 闭源 -
参考文献:google的dapper论文
E文原版:http://research.google.com/pubs/pub36356.html
中文翻译:http://bigbully.github.io/Dapper-translation/
APM的鼻祖是Google Dapper
英文版paper: http://research.google.com/pubs/pub36356.html
中文翻译版: http://bigbully.github.io/Dapper-translation/
国外工具列表:
ZIPKIN: https://github.com/openzipkin/zipkin
pinpoint:https://github.com/naver/pinpoint
appdash: https://github.com/sourcegraph/appdash
国内工具列表:
阿里的鹰眼介绍: http://club.alibabatech.org/resource_detail.htm?topicId=102
点评的cat: https://github.com/dianping/cat
京东的hydra(不维护): https://github.com/odenny/hydra
还有个商业化的oneAPM。