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

为什么需要Spring Cloud Sleuth?

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

在微服务系统中,一个来自用户的请求先到到达前端A,然后通过远程调用RPC,到达系统的中间件B、C(如负载均衡、网关等),最后到达后端服务D、E,后端经过一系列的业务逻辑计算,最后将数据返回给用户。对于这样一个请求,经历了这么多个服务,怎么样将它的请求过程用数据记录下来呢?这就需要用到服务链路追踪。

目前,常见了链路追踪组件有Google的Drapper、Twitter的Zipkin,以及阿里的Eagleeye鹰眼等,它们都是非常优秀的链路追踪开源组件。

创建Zipkin作为工程,作为链路追踪服务中心,负责存储链路数据。其他工程之间有相互之间的api调用,有的使用Feign调用,有的使用Ribbon结合RestTemplate调用。

链路追踪服务中心maven引入依赖eureka-server作为服务注册中心,引入zipkin依赖zipkin-server和zipkin server的UI界面依赖zipkin-autoconfigure-ui。

springclound分布式链路追踪 springcloud链路追踪原理_Zipkin

application启动类

springclound分布式链路追踪 springcloud链路追踪原理_链路_02

application.yml

springclound分布式链路追踪 springcloud链路追踪原理_数据_03

其他服务提供者的工程,maven依赖要加入spring-cloud-starter-zipkin依赖。application.yml中需要配置zipkin-server的base-url

springclound分布式链路追踪 springcloud链路追踪原理_数据_04

application.yml

springclound分布式链路追踪 springcloud链路追踪原理_Zipkin_05

除了上面的链接追踪,还可以在链路追踪中添加自定义数据,比如操作人等数据。也可以使用RabbitMQ传输链路数据,在Mysql数据库中存储链路数据等等,这里就不总结了。