分布式追踪技术的现状、挑战与替代方案
1. 分布式追踪的因果关系与局限性
分布式追踪在现代分布式系统中扮演着重要角色,但用户常常会遇到一个关键问题:“为什么这个请求这么慢?” 虽然理想情况下,答案应该包含在追踪信息中,或者能通过与类似追踪的对比找到,但实际情况并非总是如此。
有时候,无法从追踪信息中找到答案,可能是因为追踪工具的不足,例如未记录超时发生的时间,就难以判断超时是否导致了错误响应。也可能是外部因素导致请求变慢,如服务器 CPU 过载,处理请求的线程没有足够的 CPU 时间完成工作,而这些在追踪中无法体现。另外,请求因等待锁而被阻塞,若未对同步原语的等待和持有时间进行检测,也难以诊断问题。
这些例子表明,仅依靠追踪信息的可见性是有限的。不过,我们可以将追踪中的慢请求与日志和指标关联起来(利用其他可观测性支柱),只要追踪中捕获了完整的因果关系树,就可以利用其他数据源填补可见性缺口。
然而,当因果关系未被完全追踪时,问题会变得更加复杂。如果分布式系统中某些组件不支持追踪(即不传播追踪上下文和/或记录跨度),我们可能甚至意识不到对它们的依赖。研究界已经提出了一些从分布式系统的黑盒行为推断因果关系的方法,例如 2003 年的 Project5 探索了组件间消息的时间是否能揭示因果关系,以及 Mystery Machine 通过对大量系统日志中的信息进行假设检验来推导系统行为的因果模型。
此外,请求变慢的根本原因有时源于请求可见范围(甚至生命周期)之外的间接依赖。例如在共享队列中,昂贵的请求 A 排在队列前面,会减慢后面排队的请求 B 和 C,而队列引入的请求顺序可能导致队首阻塞。由于对入队和出队等细粒度操作进行检测会带来开销,通常不会这样
超级会员免费看
订阅专栏 解锁全文
724

被折叠的 条评论
为什么被折叠?



