手记

【九月打卡】第5天 服务调用链追踪-Sleuth

课程名称:Java架构师-技术专家
课程章节: 阶段四 · 服务调用链追踪、消息驱动
课程讲师: 慕课讲师团队

课程内容

调用链路数据模型

Trace,Span,Annotatio

Sleuth数据结构

  • Trace :它就是从头到尾贯穿整个调用链的 ID ,叫做 Trace ID,不管调用链路中途访问了多少服务节点,在每个节点的 log 中都会打印同一个 Trace ID

  • Span:它标识了 Sleuth 下面一个基本的工作单元,每个单元都有一个独一无二的 ID。比如 服务 A 发起对 服务 B 的调用,这个事件就可以看作一个独立单元,生成一个独立 ID。

Span 不仅仅是一个 ID ,还包含一些其它的信息,比如时间戳,它标识了这个 Span 在执行过程中发起的一些特殊事件。

Annotation标记

一个 Span 可以包含多个 Annotation ,每个 Annotation 表示一个特殊事件,比如:

  • cs Client Sent,客户端发送了一个调用请求。

  • sr Server Received,服务端收到了来自客户端的调用

  • ss Server Sent,服务端将 Response 发送给客户端

  • cr Client Received:客户端收到了服务端发来的 Response

每个 Annotation 同样有一个时间戳字段,这样我们就能分析一个 Span 内部每个事件的起始和结束事件。

上面的图中调用了两个接口 Server 1 和 Service 2 ,整个调用过程的所有 Span 都有相同的 Trace ID,但每一个 Span 都有独立的 Span ID。其中 Service 1 对 Service 2 的调用分为两个 Span ,蓝色 Span 的时间跨度从调用发起直到调用结束,分别记录了 4 个特殊事件(对应客户端和服务端对Request 和 Response 的传输)。绿色 Span 主要针对 Service 2 内部业务的处理,因此我们在 Service2 中打印的日志会带上绿色 Span 的 ID。

服务节点间的 ID 传递

Sleuth 通过 Filter 向 Header 中添加追踪信息。

HTTP Header Name

Trace Data

X-B3-TraceId

Trace ID

链路全局唯一ID

X-B3-SpanId

Span ID

当前 Span 的 ID

X-B3-ParentSpanId

Parent Span ID

前一个Span 的ID

X-Span-Export

Can be exported for sampling or not

是否可以被采样

在调用下一个服务的时候,Sleuth 会在当前的 Request Header 中写入上面的信息,这样下游系统就很容易识别出当前 Trace ID以及它的前置 Span ID 是什么。

整合 Sleuth 追踪调用链路

  • 创建 sleuth-traceA 和 sleuth-traceB,添加 Sleuth 依赖

  • 调用请求链路,查看 log 中的信息

  • 采样率设置

课程收获

今天学习的收获是

  • 链路追踪后面的数据结构

  • Sleuth 是如何在不同服务节点之间传递数据的。

0人推荐
随时随地看视频
慕课网APP