链路追踪 trace:Spring Cloud Sleuth集成Zipkin用MQ通信(完结)

举报
李路的路 发表于 2021/08/10 22:08:35 2021/08/10
【摘要】 链路追踪是分布式中一个排查问题的重要方式,Spring Cloud中的多个组件,利用这些组件构建一个微服务系统。本系列文章将会介绍Spring Cloud提供的链路监控组件Spring Cloud Sleuth。Spring Cloud Sleuth 提供了分布式链路追踪的解决方案,用以追踪微服务系统中的某一次的请求完整过程。接下来是客户端的改进。 客户端服务改进首先,客户端服务需要引入Sp...

链路追踪是分布式中一个排查问题的重要方式,Spring Cloud中的多个组件,利用这些组件构建一个微服务系统。本系列文章将会介绍Spring Cloud提供的链路监控组件Spring Cloud Sleuth。Spring Cloud Sleuth 提供了分布式链路追踪的解决方案,用以追踪微服务系统中的某一次的请求完整过程。

接下来是客户端的改进。

客户端服务改进

首先,客户端服务需要引入Spring Cloud Stream 和 sleuth-stream的依赖。

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-sleuth-stream</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
        </dependency>
    </dependencies>

其次更改配置文件,去掉http通信的配置,并配置Spring Cloud Stream相关参数,具体配置如下:


spring:
  sleuth:
    sampler:
      percentage: ${ZIPKIN_RATE:1}
  rabbitmq:
    host: ${RABBIT_ADDR:localhost}
    port: ${RABBIT_PORT:5672}
    username: guest
    password: guest

如上的操作,即可实现了服务端和客户端的改进,接着就是,我们看下测试结果如何。

结果测试

经过如上的改进,我们可以正常的访问 Zipkin Server并展示采集到的链路调用信息,客户端服务API接口的响应时间也相对得到了改善,不会出现某次请求耗时特别长的情况。
验证MQ通信使得数据不丢失的特点,将数据库中的数据清空,然后刷新Zipkin Server的界面,可以看到不再有数据。然后将Zipkin Server程序关闭,然后再多次访问客户端服务的地址。之后,我们重启Zipkin Server程序,启动成功后访问UI界面很快看到页面有数据可以选择了。以上的操作结果说明Zipkin Server重启后,从MQ中成功获取出了在关闭这段时间里客户端服务之间产生的信息数据。链路调用监控变得更加健壮。

在上述的实现中,Zipkin Server的存储是基于jdbc数据库,在测试环境中部署一段时间之后,访问Zipkin UI将会变得很慢,究其原因,是链路监控的数据非常多,当多个应用程序运行一段时间之后,数据分析变得异常困难。
Zipkin Server的存储也支持ElasticSearch,基于ES的配置只需要将JDBC的配置更换为如下的依赖:

<!-- 添加 spring-data-elasticsearch的依赖 -->
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-storage-elasticsearch-http</artifactId>
    <optional>true</optional>
</dependency>

具体配置文件,读者可以参见笔者 GitHub 的配套代码。

小结

微服务架构的本质,是把整体的业务拆分成很多有特定明确功能的服务,通过很多分散的小服务之间的配合,去解决更大,更复杂的问题。对被拆分后的服务进行分类和管理,彼此之间使用统一的接口来进行交互。微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错误和异常,我们只要盯住一个点,就可以快速定位和处理问题,但是在微服务的架构下,大部分功能模块都是单独部署运行的,彼此通过总线交互,都是无状态的服务,这种架构下,前后台的业务流会经过很多个微服务的处理和传递。

微服务架构其实是一把双刃剑,当业务流出现了错误和异常,需要定位是哪个点出的问题,具体出了什么问题。可以说,分布式调用链监控组件在微服务架构中已经成为了标配。Spring Cloud Sleuth成功解决了上述问题,客户端应用服务引入Spring Cloud Sleuth的包就可以记录链路调用的日志信息,添加新功能而无需修改代码,对于业务服务的开发者来说是透明的。结合Zipkin,将日志信息发送到Zipkin存储,提供的Zipkin UI展示了请求的Trace列表,对于某一次的请求,还可以具体分析其中的耗时原因。当请求出错时,可以快速定位到出错的业务服务和具体的方法。Zipkin还可以分析服务与服务之间的依赖关系,绘制成整个系统的应用拓扑,使得每个服务都能够清楚自己的上下游服务。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。