一. 为什么要进行链路追踪?
微服务架构是一种分布式架构,微服务系统按照业务划分服务单元,一个微服务往往会有很多个服务单元,一个请求往往会有很多个单元参与,一旦请求出现异常,想要去定位问题点真心不容易,因此需要有个东西去跟踪请求链路,记录一个请求都调用了哪些服务单元,调用顺序是怎么样的以及在各个服务单元处理的时间长短。常见的服务链路追踪组件有google的dapper、twitter的zipkin、阿里的鹰眼等,它们都是出众的开源链路追踪组件。
二.Zipkin介绍
spring cloud 有自己的组件来集成这些开源组件,它就是spring cloud sleuth,它可以方便的整合zipkin进行服务链路追踪,它为服务链路追踪提供了一套完整的解决方案。
zipkin分服务端和客户端。客户端就是我们的服务单元,用来发送链路信息到服务端;服务端用来接收客户端发送来的链路信息,并进行处理,它包括4个部分:
1.Collector组件:用来接收客户端发送的链路信息然后整理成zipkin能处理的格式,供后续存储或向外部提供查询使用。
2.Storage组件:对链路信息进行保存,默认存储在内存,通过配置还可以保存到mysql等地方。
3.Restful API组件:对其他服务单元提供api接口进行查询链路信息。
4.Web UI组件:调用API 组件的接口并将信息显示到web 画面。
三. 项目架构
节点 | 服务 | 服务名 | 启动顺序 |
192.168.68.128:911 | eureka注册中心 | eureka-center | 1 |
localhost:5200 | 链路追踪服务 | zipkin-service | 2 |
localhost:2221 | 服务提供者1:cart-service | cart-service | 3 |
localhost:2222 | 服务提供者2:cart-service | cart-service | 4 |
localhost:9999 | 服务消费者 | cart-client | 5 |
localhost:1111 | 网关服务 | cartGatewayServ | 6 |
顺序启动后,注册中心如图所示:
接下来我们来看具体代码实现。
四.Zipkin Server端代码实现
1.搭建项目,代码目录结构如下:
2.Pom文件中主要是要引入如下三个依赖:
<!-- 引入eureka 客户端依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 引入zipkin-server依赖,提供server端功能 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<!-- 引入zipkin-autoconfigure-ui依赖,用来提供zipkin web ui组件的功能,方便查看相关信息 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
3.新建启动类,如图所示:
最主要是应用到了@EnableZipkinServer注解,用于开启Zipkin Server功能。
4. 新建配置文件,如图所示:
要向eureka注册中心注册自己。
五.Zipkin Client端代码实现
客户端的实现非常简单,我们只要在前面已经搭建的微服务上稍作改动即可。
1.引入依赖:
<!-- 引入zipkin 依赖 ,提供zipkin客户端的功能 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2. 修改配置文件,追加两项配置
#指定zipkin服务端的url
spring.zipkin.base-url=http://localhost:5200
#设定样本收集的比率为100%
spring.sleuth.sampler.percentage=1.0
由于分布式系统的请求量一般比较大,不可能把所有的请求链路进行收集整理,因此sleuth采用抽样收集的方式,设定一个抽样百分比。在开发阶段,我们一般设定百分比为100%也就是1。
六.执行测试
按照项目架构列出的顺序依次启动服务。主要要先访问一下相关的微服务,链路追踪界面才能看得到。我们先通过服务消费者访问服务【http://localhost:9999/client/list.do】,再通过网关访问服务【http://localhost:1111/cart-service/flow/cart/list.do?token=aa】,当然了,随便你怎么访问了,接下来我们可以看到链路追踪的界面:
选择cartgatewayserv,再点击Find Traces按钮,可以追踪访问链路
点击进去,能看到请求都经历了哪些服务节点。再点相关link,可以查看调用顺序,并且还能看到在各个服务节点的处理的时间长度。
切换到依赖画面,能查看服务节点的依赖关系
好了,就介绍到这里,如果觉得对您有帮助,请点个赞吧!