第11章 分布式服务跟踪: Spring Cloud Sleuth

  通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果, 在复杂的微服务架构系统中, 几乎每一个前端请求都会形成一条复杂的分布式服务调用链路, 在每条链路中任何一个依赖服务出现延迟过高或错误的时候都有可能引起请求最后的失败。这时候,对于每个请求, 全链路调用的跟踪就变得越来越重要, 通过实现对请求调用的跟踪可以帮助我们快速发现错误根源以及监控分析每条请求链路上的性能瓶颈等。Spring Cloud Sleuth 提供了 一套完整的解决的分布式服务跟踪问题的方案

pom.xml 中增加下面的依赖

<parent> 
  <groupid>org.springframework.boot</groupid> 
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>l.3.7.RELEASE</version> 
  <relativePath/> 
</parent> 
<dependency> 
  <groupid>org.springframework.boot</groupid> 
  <artifactid>spring-boot-starter-web</artifactId>
</dependency> 
<dependency> 
  <groupid>org.springframework.cloud</groupid> 
  <artifactid>spring-cloud-starter-eureka</artifactid>
</dependency> 
<dependency> 
  <groupid>org.springframework.cloud</groupid> 
  <artifactid>spring-cloud-starter-ribbon</artifactid>
</dependency> 
<dependencyManagement> 
  <dependencies> 
    <dependency> 
      <groupid>org.springframework.cloud</groupid> 
      <artifactid>spring-cloud-dependencies</artifactid>
      <version>Brixton.SRS</version> 
      <type>pom</type>
      <scope>import</scope>
    </dependency> 
  </dependencies> 
</dependencyManagement>

在application.properties 中,将 eureka.client.serviceUrl.defaultZone参数指向 eureka-server 的地址

spring.application.name=trace-1 
server.port=9101 
eureka.client.serviceUrl.defaultZone=http://localhost:llll/eureka/ 

跟踪原理

  • 为了实现请求跟踪, 当请求发送到分布式系统的入口端点时, 只需要服务跟踪框架为该请求创建一个唯一的跟踪标识, 同时在分布式系统内部流转的时候,框架始终保待传递 该唯一标识, 直到返回给请求方为止, 这个唯一标识就是前文中提到的Trace ID。 通过TraceID的记录, 我们就能将所有请求过程的日志关联起来
  • 为了统计各处理单元的时间延迟, 当请求到达各个服务组件时, 或是处理逻辑到达某个状态时, 也通过一个唯一标识来标记它的开始、 具体过程以及结束, 该标识就是前文中提到的SpanID。 对于每个Span来说, 它必须有开始和结束 两个节点, 通过记录开始 Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录之外, 它还可以包含一些其他元数据, 比如事件名称、 请求信息等

猜你喜欢

转载自www.cnblogs.com/hzzjj/p/10291685.html
今日推荐