分布式跟踪

背景

当前的互联网服务,底层都由大规模的分布式集群组成,不同的模块、语言、团队,数以千计的服务器,跨数据中心等。针对复杂集群问题的分析定位,我们要能理解系统的行为,需要借助一些跟踪工具。

分布式跟踪主要源自Google的论文Dapper,基于其理念有不同的实现。zipkin是Twitter开源的Dapper实现,广泛应用于分布式集群的消息、日志跟踪。

c

整体架构

 

使用Brave/Spring Sleuth或其他参考实现,在客户端实现流程跟踪,并在日志中记录跟踪信息。 根据采样要求,对某一个E2E的处理流程,上报给Zipkin进行分析处理。

依赖关系分析:

消息跟踪分析:



Spring Cloud实现

注意:

 当前的Spring Cloud相关书籍、总结、教程等,对于分布式跟踪,如果涉及MQ,几乎都是介绍Edgware版本以前的方式:即使用spring-cloud-sleuth-zipkin-stream和@EnableZipkinStreamServer的方式。

这种方式用Spring开发人员的话说就是一个怪胎,它使用JDK方式编码Sleuth Span,与标准的Zipkin/Brave方式不兼容。在Edgware版本已经废弃,并会在F版本发布时删除。使用MQ方式,必须使用下面描述的方式,且Spring Cloud版本要升级的Edgware(当前为Edgware.SR1)。

在pom.xml中增加如下依赖:

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

在application.properties中配置MQ相关信息:

spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=xxx
spring.rabbitmq.password=xxx
spring.rabbitmq.virtualHost=/svr
spring.zipkin.rabbitmq.queue=zipkin

spring会自动在收到http请求、调用http接口(RestTemplate、Feign等都支持)、打印日志时,自动进行分布式跟踪处理,对业务代码无感知。默认的采样率为0.1,即10%的流程消息会被上报的Zipkin当中。

猜你喜欢

转载自blog.csdn.net/qq_33315102/article/details/80585869