分布式请求链路追踪Sleuth

一、基础概述

1、为什么会出现Sleuth这个技术,为了解决哪些问题?

在微服务框架中,一个由客户端发起的请求,在后端系统中会经过多个不同的服务节点调用,来协同产生最后的请求结果,每一个前端请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时、或错误都会引起整个请求最后的失败:

70.jpg

2、Sleuth是什么?

SpringCloud Sleuth提供了一套完整的服务追踪的解决方案;

在分布式系统中提供追踪解决方案并且兼容支持了Zipkin;

可以这么理解:一个管监控收集整理(Sleuth),一个管展现(Zipkin)


二、Sleuth之Zipkin搭建

1、SpringCloud从F版开始已经不再需要我们自己构建Zipkin Server了,只需要调用jar包即可;

下载网址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/

下载完成后,我们会获得到一个jar包: zipkin-server-2.12.9-exec.jar

直接使用 java -jar 运行即可:

java -jar zipkin-server-2.12.9-exec.jar

启动banner如下:

71.jpg

2、运行控制台:

http://localhost:9411/zipkin/

72.jpg

3、完整的调用链路:

表示一条请求链路,一条链路通过Trace Id作为唯一标识,Span标识发起的请求信息,各Span通过Parent Id关联起来:

73.jpg

上图太复杂,我们可以精简一下再看:

74.jpg

整个链路的依赖关系如下:

75.jpg

名词解释:

  • Trace:类似于树结构的Span集合,标识一条调用链路,存在唯一标识 traceId;

  • Span:标识调用链路来源,通俗的理解span就是一次请求信息;


三、Sleuth链路监控展示

1、为了方便,就不新增模块了:我们使用最初的 cloud-provider-payment8001和cloud-consumer-order80进行测试:

首先在这两个模块中增加zipkin的依赖pom.xml:

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

2、在配置文件 application.yml 中增加zipkin的配置:

spring:
  application:
    name: cloud-payment-service
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      #采样率:介于0到1之间,1代表全部采集,一般生产中0.5差不多了
      probability: 1

3、在payment8001的业务类PaymentController中增加一个用于测试zipkin的方法接口:

@GetMapping("/payment/zipkin")
public String paymentZipkin(){
    return "Hi, i'm paymentZipkin server fall back, welcome to jiguiquan'home O(∩_∩)O哈哈~";
}

4、在order80的业务类OrderController中,增加以下接口:

//========> Zipkin + Sleuth
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin(){
    return restTemplate.getForObject("http://localhost:8001" + "/payment/zipkin/", String.class);
}

5、依次启动项目7001/8001/80进行测试:

76.jpg

使用以下链接通过order80调用payment8001的服务: http://localhost/consumer/payment/zipkin 

可以多点几次:

77.jpg

6、此时我们访问Zipkin的前端界面:  http://localhost:9411/zipkin 

界面如下,可见是相当的丰富:

78.jpg

随便点进一个:

79.jpg

调用过程及消耗时间,都记录得很详细!

7、还可以看到各个服务之间的依赖关系:

80.jpg

可以,Sleuth+Zipkin的功能非常强大,在实际生产中意义重大!

到这里,Sleuth+Zipkin的链路追踪和展示就基本结束了!

个人此项目代码地址(持续更新):

https://github.com/jiguiquan/cloud2020

jiguiquan@163.com

文章作者信息...

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐