场景:
开发和运维人员从入口服务A开始查起,确认服务A没有问题,然后到服务B,在服务B中进行排查,确认服务B没有问题,在传递到服务C中进行排查,以此类推。有时查一个问题,会把服务架构中的多个应用查询一遍,而有时出问题的系统恰恰是底层系统,在排查了多个不必要的系统后才能准确的定位问题。
如何解决该问题呢?那就是服务调用链路跟踪
调用链路跟踪
谷歌在2010年发布的Dapper论文中介绍了谷歌分布式系统跟踪的基础原理和架构,介绍了谷歌以低成本实现应用级透明的遍布多个服务的调用链跟踪系统的方法。
Dapper开始仅仅是一个独立的调用链路跟踪系统,后来逐步演化为一个监控平台,并且在监控平台上孕育了许多工具。
典型的分布式系统的调用关系图:
服务调用结构是一个树型结构,树节点是整个架构的基本单元,每个节点是一个独立的服务节点。在谷歌的Dapper论文中,每个节点都对应一个Span,节点之间的连线表示Span和它的父Span之间的关系,具体表现为一次调用请求和响应的调用关系。
我们先关注两个服务之间的同学,两个服务之间有成千上万次通信,服务1与服务2进行交互时,会发送一个请求1,并接收到一个响应1,那么我们通过什么手段标示响应和请求是一对呢?