分布式追踪

分布式追踪

随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,业务的调用链越来越复杂,特别是在微服务时代,客户的请求可能会导致应用程序中出现数百种不同的服务调用。日志可以让你了解特定时间发生的情况,但在构建分布式系统时仍然很难将它们关联起来。通过日志很难监控超过预期时长的调用、失败的调用,以及为什么会调用失败。你可以通过唯一请求 ID 查找匹配的日志,但查询客户所面临的最慢的调用仍然很困难。

那么如何快速准确的定位到线上故障、缺乏一个自上而下全局的调用 id 的情况下如何有效的进行相关的数据分析工作,就带来了一定的挑战。对于大型网站系统,如淘宝、京东等电商网站,这些问题尤其突出。一个典型的分布式系统请求调用过程如下:

img

比较成熟的解决方案是通过调用链的方式,把一次请求调用过程完整的串联起来,这样就实现了对请求调用路径的监控。OpenTracing 作为所有 OSS 项目的唯一标准,可以让你的应用程序代码不依赖于特定的跟踪供应商。Zipkin、Jaeger、Appdash、LightStep、Hawkular、Instane 等是常用的开源客户端,并将跨度信息发布到支持的跟踪器。

业务场景

  • 故障快速定位

通过调用链跟踪,一次请求的逻辑轨迹可以用完整清晰的展示出来。开发中可以在业务日志中添加调用链 ID,可以通过调用链结合业务日志快速定位错误信息。

  • 各个调用环节的性能分析

在调用链的各个环节分别添加调用时延,可以分析系统的性能瓶颈,进行针对性的优化。

  • 各个调用环节的可用性,持久层依赖等

通过分析各个环节的平均时延,QPS 等信息,可以找到系统的薄弱环节,对一些模块做调整,如数据冗余等。

  • 数据分析等

调用链是一条完整的业务日志,可以得到用户的行为路径,汇总分析应用在很多业务场景。