EN
返回档案库

案例库 · 工程与运营 · 技术决策 · 2008–2010

谷歌的Dapper:用采样追踪一次请求跨数千台机器的过程

Dapper为每个Google请求分配一个跟踪ID,在服务间传递,然后对跟踪记录进行低成本采样,将延迟排查的猜测变成监控平台。

Google

解法

一次谷歌搜索或请求可能扩展到数千台机器、数十个服务和多个数据中心,因此从单机日志几乎无法解释缓慢响应。虽然有研究工具(如Magpie、X-Trace),但没有一个能满足谷歌对低开销和普遍部署的需求。

Dapper的设计让追踪几乎零成本:跟踪ID和跨度ID在RPC元数据中传递,几个通用库完成插桩(应用无需修改),采样策略只记录一小部分跟踪——默认约为1/1024。结果是在大规模下实现了透明的应用追踪。

经过两年的生产运行,Dapper从调试工具演变为监控平台:团队用它发现延迟异常、测量依赖关系、优化存储和搜索路径。其理念直接启发了开源后续者如Zipkin和Jaeger,它们把相同的方法推广到了整个行业。

生效的原因

  • 采样在谷歌规模下保持开销可忽略不计
  • RPC元数据中的跨度ID使追踪对应用透明
  • 树形重组展示完整调用路径而非单台服务器
  • 追踪数据成为新监控工具的平台
取得的成效跟踪ID伴随RPC传递;采样跟踪以保持低成本聪明

可借鉴之处

要调试一个太大难以观察的系统,可以观察统计样本并降低识别成本:在每个RPC中携带跟踪ID,就能把分布式延迟变成可查询的树。

后续进展

Dapper的设计成为分布式追踪的蓝图——Zipkin和Jaeger基于其理念构建,并成为CNCF标准。如今,追踪是现代云系统可观测性的核心支柱。

资料来源

发现哪里写错了?告诉我们。

相关案例