此文章主要讲解 springcloud 中的分布式请求链路跟踪 Sleuth 的相关知识。
参考文章: https://www.yuque.com/sunxiaping/yg511q/xc44uq
微服务架构下的问题
在大型系统的微服务化构建中,一个系统会被拆分成许多模块。这些模块负责不同的功能,组合成系统,最终可以提供丰富的功能。在这种架构中,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,可能是由不同团队开发、可能使用不同的编程语言来实现、可能部署在几千台服务器上,横跨多个不同的数据中心,也就意味着这种架构形式也会存在一些问题:
- 如何快速的发现问题?
- 如何判断故障影响范围?
- 如何梳理服务依赖以及依赖的合理性?
- 如何分析链路性能问题以及实时容量规划?
分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达那台机器上、每个服务节点的请求状态等等。
目前业界比较流行的链路追踪系统如:Twitter 的
Zipkin
,阿里的鹰眼,美团的Mtrace
,大众点评的cat
等,大部分都是基于 Google 发表的Dapper
。Dapper 阐述了分布式系统,特别是微服务架构中链路追踪的概念、数据展示、埋点、传递、收集、存储和展示等技术细节。
Sleuth
分布式请求链路跟踪,超大型系统。需要在微服务模块极其多的情况下,比如80调用8001的,8001调用8002的,这样就形成了一个链路
,如果链路中某环节出现了故障
,我们可以使用Sleuth进行链路跟踪
,从而找到出现故障的环节。
在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败。
简介
Spring Cloud Sleuth主要功能就是在分布式系统中提供追踪解决方案
,并且兼容支持了 zipkin,只需要在 pom 文件中引入相应的依赖即可。- sleuth 负责跟踪,而 zipkin 负责展示。
相关概念
Spring Cloud Sleuth 为 Spring Cloud 提供了分布式追踪解决方案。它大量借用了 Google 的 Dapper 的设计。需要先了解一下 Sleuth 中的术语和相关概念。
Spring Cloud Sleuth 采用的是 Google 的开源项目 Dapper 的专业术语。
Span:
基本工作单元,例如:在一个新建的 span 中发送一个 RPC 等同于发送一次回应请求给 RPC,span 通过一个 64 位 ID 唯一标识,trace 以另一个 64 位 ID 标识,span 还有其他数据信息,比如摘要、时间戳事件、关键值注释(tags)、span 的 ID 以及进度 ID(通常是 IP 地址),span 在不断的启动和停止的同时记录了时间信息,当你创建了一个 span,你必须在未来的某个时刻停止它。Trace:
一系列 span 组成的一个树状结构。例如,当你正在跑一个分布式大数据工程,你可能需要创建 Trace。Annotation:
用来及时记录一个事件的存在,一些核心 annotations 用来定义一个请求的开始和结束。cs-Client Server:
客户端发送一个请求,这个 annotation 描述了这个 span 的开始。
sr-Server Received:
服务端获得请求并准备开始处理它,如果将其 srj 减去 cs 时间戳便可得到网络延迟。
ss-Server Sent:
注解表明请求处理的完成(当请求返回客户端),如果 ss 减去 sr 时间戳便可得到服务端需要的处理请求时间。
cr-Client Received:
表明 span 的结束,客户端成功接收到服务端的回复,如果 cr 减去 cs 时间戳便可得到客户端从服务端获取回复的所有所需时间。
精简过后:
环境
zipkin 下载
从 SpringBoot2.0 开始,官方就不再支持使用自建 Zipkin Server 的方式进行服务链路追踪,而是直接提供了编译好的 jar 包来给我们使用。可以从官方网站上下载 Zipkin 。
zipkin 下载地址: 点我下载 。
zipkin 启动
- 使在命令行输入
java -jar zipkin-server-2.12.9-exec.jar
启动 Zipkin Server。
默认 Zipkin Server 的请求端口是
9411
.在浏览器输入 http://localhost:9411 即可进入到 Zipkin Server 的管理后台。
使用 Docker 启动 Zipkin Server
1 | docker run -d -p 9411:9411 --name zipkin openzipkin/zipkin:2.12.9 |
案例
使用之前创建的模块 cloud-provider-payment8001 和 cloud-consumer-order80 进行改造
引依赖
1 | <!-- 包含了 sleuth + zipkin --> |
YML 配置
1 | spring: |
消费者:
1 | server: |
提供者:
1 | # 端口号 |
业务类
在 8001 的 Controller 中添加一个简单的请求
1 | "/payment/zipkin") ( |
在 80 的 Controller 中添加请求
1 | "/consumer/payment/zipkin") ( |
测试
- 启动 eureka 7001
- 启动提供者 8001
- 启动消费者 80
使 80 访问 8001 几次: http://localhost/consumer/payment/zipkin
访问: http://localhost:9411/zipkin/ ,查看情况
点击该 trace 可以看到请求的细节:
发布时间: 2021-01-21
最后更新: 2024-06-24
本文标题: SpringCloud Alibaba入门到精通(十三)- 分布式请求链路跟踪Sleuth(不推荐)
本文链接: https://blog-yilia.xiaojingge.com/posts/6bab2f78.html
版权声明: 本作品采用 CC BY-NC-SA 4.0 许可协议进行许可。转载请注明出处!
