0%

Dapper:大规模分布式系统的跟踪系统

这篇论文作于2010年,主要解决了在分布式系统下进行调用链追踪的问题。

问题场景

如下是一个分布式系统的调用关系,如何知道一次慢调用是哪个系统模块导致的?

path

解决方案

在公共的RPC工具上埋点记录通讯数据,业务团队使用此RPC工具就能收集到通讯数据,无侵入,可以做到业务不感知。
如下的一个长方形代表了一个调用,我们称之为span,每个span记录了parent id代表这个调用的父调用,第一个调用(根)没有parent id。
同一个调用链路上的span都有相同的trace id,下图中的所有span的trace id都是相同的。

trace-tree

数据采集方式

1.各服务将span数据记录到本地
2.dapper守护进程将本地日志读取到dapper的收集器里
3.dapper收集器将结果写道bigtable中,每个trace记录一行
span

设计中的关键点

  • 分布式
  • 低消耗
  • 应用透明
  • 结果快速展示

论文链接:
https://static.googleusercontent.com/media/research.google.com/zh-CN//archive/papers/dapper-2010-1.pdf