likes
comments
collection
share

微服务架构➖SpringCloud➖Sleuth

作者站长头像
站长
· 阅读数 4

微服务架构➖SpringCloud➖Sleuth

关于作者

  • 作者介绍


Spring Cloud Alibaba Sleuth--链路追踪

链路追踪介绍

  • 在大型系统的微服务化构建中,一个系统被拆分成许多模块。这些模块负责不同的功能,并最终组合成一个能够提供丰富功能的系统。在这种架构中,一次请求通常涉及多个服务。互联网应用的构建涉及不同的软件模块集,这些软件模块可能由不同的团队开发,可能使用不同的编程语言实现。它们可能部署在数千台服务器上,横跨多个不同的数据中心。因此,这种架构形式也会面临一些问题:
    • 如何快速发现问题?
    • 如何判断故障的影响范围?
    • 如何梳理服务之间的依赖关系以及这些依赖关系的合理性?
    • 如何分析链路性能问题以及进行实时容量规划?

微服务架构➖SpringCloud➖Sleuth

分布式链路追踪(Distributed Tracing)是将一次分布式请求还原成调用链路,进行日志记录、性能监控,并集中展示一次分布式请求的调用情况。例如,记录各个服务节点上的耗时、请求到达的具体机器、每个服务节点的请求状态等等。

以下是常见的链路追踪技术:

  • cat:由大众点评开源,基于Java开发的实时应用监控平台,包括实时应用监控和业务监控。集成方案通过代码埋点实现监控,例如拦截器、过滤器等。尽管集成成本较高且对代码有较大的侵入性,但风险也相对较高。
  • zipkin:由Twitter公司开源,是一个开放源代码的分布式跟踪系统,用于收集服务的定时数据,解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展示。与spring-cloud-sleuth结合使用较为简单,集成方便,但功能相对简单。
  • pinpoint:Pinpoint是韩国人开源的基于字节码注入的调用链分析和应用监控分析工具。它支持多种插件,具有强大的UI功能,并且无需对接入端进行代码侵入。
  • skywalking:SkyWalking是本土开源的基于字节码注入的调用链分析和应用监控分析工具。它支持多种插件,具有较强的UI功能,并且无需对接入端进行代码侵入。目前已加入Apache孵化器。
  • Sleuth:Spring Cloud提供的分布式系统中的链路追踪解决方案。

注意:Spring Cloud Alibaba技术栈并没有提供自己的链路追踪技术。我们可以采用Sleuth + Zipkin来实现链路追踪解决方案。

Sleuth入门

Sleuth介绍

Spring Cloud Sleuth主要提供了在分布式系统中的追踪解决方案。它在设计上借鉴了Google Dapper,并引入了一些术语和相关概念。让我们先了解一下Sleuth中的这些术语和概念。

  • Trace:由一组具有相同Trace Id的Span串联而成的树状结构。为了实现请求的跟踪,当请求到达分布式系统的入口端点时,服务跟踪框架为该请求创建一个唯一标识(即TraceId)。该TraceId会在整个分布式系统中传递,直到整个请求的返回。通过使用这个唯一标识,我们可以将所有的请求串联起来,形成一条完整的请求链路。

  • Span:代表一组基本的工作单元。为了统计各处理单元的延迟,当请求到达各个服务组件时,使用一个唯一标识(即SpanId)来标记它的开始、具体过程和结束。通过SpanId的开始和结束时间戳,我们可以计算出该Span的调用时间。除此之外,我们还可以获取事件的名称、请求信息和其他元数据。

  • Annotation用它记录一段时间内的事件,内部使用的重要注释:

    • cs(Client Send)客户端发出请求,开始一个请求的生命
    • sr(Server Received)服务端接受到请求开始进行处理, sr-cs = 网络延迟(服务调用的时间)
    • ss(Server Send)服务端处理完毕准备发送到客户端,ss - sr = 服务器上的请求处理时间
    • cr(Client Reveived)客户端接受到服务端的响应,请求结束。 cr - sr = 请求的总时间

微服务架构➖SpringCloud➖Sleuth

Sleuth入门

微服务名称, traceId, spanid,是否将链路的追踪结果输出到第三方平台
[api-gateway,3977125f73391553,3977125f73391553,false] 
[service-order,3977125f73391553,57547b5bf71f8242,false] 
[service-product,3977125f73391553,449f5b3f3ef8d5c5,false]
<!--链路追踪 Sleuth-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

查看日志文件并不是一个很好的方法,当微服务越来越多日志文件也会越来越多,通过Zipkin可以 将日志聚合,并进行可视化展示和全文检索。