sleuth(链路跟踪)

基本原理

如果想知道一个接口在哪个环节出现了问题,就必须清楚该接口调用了哪些服务,以及调用的顺序,如果把这些服务串起来,看起来就像链条一样,我们称其为调用链。

 

基本概念

spanid:每次调用服务的顺序。

traceid:每次请求的唯一标识。

parentid:标识调用服务的层级关系。

timestamp:上述的三个标识还不够,还需要加上时间戳,时间戳可以更精细一点,精确到微秒级。

sleuth(链路跟踪)_第1张图片

虽然能计算出从服务调用到服务返回的总耗时,但是这个时间包含了服务的执行时间和网络延迟,有时候我们需要区分出这两类时间以方便做针对性优化。那如何计算网络延迟呢?我们可以把调用和返回的过程分为以下四个事件

  • Client Sent简称cs,客户端发起调用请求到服务端。
  • Server Received简称sr,指服务端接收到了客户端的调用请求。
  • Server Sent简称ss,指服务端完成了处理,准备将信息返给客户端。
  • Client Received简称cr,指客户端接收到了服务端的返回信息。

sleuth(链路跟踪)_第2张图片

假如在这四个事件发生时记录下时间戳,就可以轻松计算出耗时,比如sr减去cs就是调用时的网络延迟,ss减去sr就是服务执行时间,cr减去ss就是服务响应的延迟,cr减cs就是整个服务调用执行的时间

其实span块内除了记录这几个参数之外,还可以记录一些其他信息,比如发起调用服务名称、被调服务名称、返回结果、IP、调用服务的名称等,最后,我们再把相同spanid的信息合成一个大的span块,就完成了一个完整的调用链sleuth(链路跟踪)_第3张图片

你可能感兴趣的:(SpringCould)