服务链路追踪spring cloud sleuth 《十一》

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35781178/article/details/84376061

spring cloud sleuth 是spring cloud 的一个组件,它的主要功能是在分布式系统中提供服务链路追踪的解决方案。

微服务架构是一个分布式架构,微服务系统按业务划分服务单元,一个微服务系统往往有很多各服务单元。由于服务单元数量众多,业务的复杂性较高,如果出现了错误和异常,很难去定位。主要体现在一个请求可能需要调用很多个服务,而内部服务的调用复杂性决定了问题难以定位。所以在微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题可以快速定位的目的。

目前常见的链路追踪组件有Google 的Dapper, Twitter 的Zipkin ,以及阿里的Eagleeye (鹰眼) ,他们都是非常优秀的链路追踪开源组件。

spring cloud sleuth采用了Google 的开源项目Dapper 专业术语
Span 基本工作单元,发送一个远程调度任务就会产生一个Span,Span 是用一个64位ID唯一标识的,Trace 是用另一个ID唯一标识的。Span 还包含了其他的信息,例如摘要,时间戳事件,Span的ID以及进程ID
Trace 由一系列Span组成,呈树状结构。请求一个微服务系统的API接口,这个API接口需要调用多个微服务单元,调用每个微服务单元都会产生一个新的Span ,所有由这个请求产生的Span 组成了这个Trace
Annotation 用于记录一个事件,一些核心注解用于定义一个请求的开始和结束,这些注解如下:
Annotation
cs-Client Sent 客户端发送一个请求,这个注解描述了Span 的开始
sr-Server Received 服务端获得请求并准备开始处理它,如果将其sr 减去cs 时间戳,便可得到网络传输的时间
ss-Server Sent 服务端发送响应,该注解表明请求处理的完成,用ss减去sr,便可得到服务器请求的时间
cr-Client Received 客户端接收响应,此时Span 结束,如果cr 的时间戳-cs 时间戳,便可以得到整个请求所消耗的时间

【注意:】

zipkin-server:
server:
  port: 9411
spring:
  application:
    name: zipkin-server

eureka:
  instance:
    appname: zipkin-server
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

--------------------------------------------------------------------------------

user-service:

server:
  port: 8762
spring:
  application:
    name: user-service
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      percentage: 1.0

eureka:
  instance:
    appname: user-service
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

------------------------------------------------------------------------------

geteway-service

server:
  port: 5000
spring:
  application:
    name: geteway-service
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      percentage: 1.0

eureka:
  instance:
    appname: geteway-service
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

zuul:
  routes:
    api-a:
     path: /user-api/**
     serviceId: user-service

查看效果:依次启动:eureka-server,zipkin-service,user-service,geteway-serivce

[后续补充]:暂未涉及{rabbitMQ 传输链路数据/在mysql 数据库中存储数据/elasticearch 存储链路数据/用kibana 链路数据}

猜你喜欢

转载自blog.csdn.net/qq_35781178/article/details/84376061