随着服务越来越多,对调用链的分析会越来越复杂。

存在的问题:

1.微服务之间的调用错综复杂,用户发送请求经历哪些服务,调用链不清楚,没有一个自动化工具来维护调用链。

2.无法快速定位调用链中哪个环节出了问题。

3.无法快速定位调用链中哪个环节比较耗时。

 

Spring Cloud Sleuth提供分布式系统中链路追踪解决方案。

同类产品有:

1.SkyWallking:

是本土开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件,UI功能较强,接入端悟代码侵入。目前已加入Apache孵化。

2.cat是大众点评开源,基于java开发的实时应用监控平台,包括实时应用监控,业务监控。集成方案是通过代码埋点的方式实现监控。

 

Sleuth术语:

1.span(跨度):

基本的工作单元。span用一个64位的id唯一标示。

除ID外,span还包含其他数据,例如描述,时间戳事件,键值对的注解(标签),spanID,span父ID等。

span被启动和停止时,记录了时间信息。初始化span被称为"root span",该span的id和trace的ID相等。

 

2.trace(跟踪):

一组共享"root span"的span组成的树状结构称为trace。

trace也是用一位64位的ID唯一标识,trace中的所有span都共享trace的ID。

 

3.annotation(标注):

annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

3.1 CS(Client Sent 客户端发送):客户端发起一个请求,该annotation描述span的开始

3.2 SR(Server Received服务器端接收):服务器端得到请求并准备处理它。如果用SR减去CS时间戳,就可以得到网络延迟。

3.3 SS(Server Sent服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。如果用SS减去SR时间戳,就能得到服务器端处理请求所需的时间。

3.4 CR(Client Received客户端接收):span结束的标识。客户端成功接收到服务器端的响应。如果用CR减去CS的时间戳就可以得到从客户端发送请求到服务端响应的所需的时间。

sr - cs = 网络延时

ss - sr = 服务器上的请求处理时间

cr - ss = 响应网络延时

cr - cs = 请求的总时间

 

Zipkin:可以与Sleuth结合使用,将Sleuth的数据展示出来。

Zipkin下载地址:Central Repository: io/zipkin/zipkin-server (maven.org)

下载后使用命令启动zipkin控制台

java -jar zipkin-server-2.14.1-exec.jar --server.port=9999

 

 

 

代码示例:

在cloud-goods中写一个action调用cloud-jifen,在cloud-jifen调用cloud-order。

形成一个调用链。

cloud-goods、cloud-jifen、cloud-order都做如下两项设置,

1.pom文件添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

 

2.配置文件中增加sleuth和zipkin的配置:

spring:
  zipkin:
    base-url: http://localhost:9999
    discovery-client-enabled: false #不在nacos注册
  sleuth:
    sampler:
      rate: 100 #采样率

 

配置完成后,重新启动服务。

再发送请求,即可在zipkin的控制台看到请求的链路信息:

 

 

 

 

 

posted on 2021-11-12 19:16  Sempron2800+  阅读(268)  评论(0编辑  收藏  举报