这篇论文作于2010年,主要解决了在分布式系统下进行调用链追踪的问题。
问题场景
如下是一个分布式系统的调用关系,如何知道一次慢调用是哪个系统模块导致的?
解决方案
在公共的RPC工具上埋点记录通讯数据,业务团队使用此RPC工具就能收集到通讯数据,无侵入,可以做到业务不感知。
如下的一个长方形代表了一个调用,我们称之为span,每个span记录了parent id代表这个调用的父调用,第一个调用(根)没有parent id。
同一个调用链路上的span都有相同的trace id,下图中的所有span的trace id都是相同的。
数据采集方式
1.各服务将span数据记录到本地
2.dapper守护进程将本地日志读取到dapper的收集器里
3.dapper收集器将结果写道bigtable中,每个trace记录一行
设计中的关键点
- 分布式
- 低消耗
- 应用透明
- 结果快速展示