没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
服务调用链路追踪
教学目标
1)能够说出服务调用链路追踪的概念以及使用场景 2)
掌握Spring Cloud Sleuth快速入门
3)理解服务追踪专业术语
4)
掌握Zipkin的安装方式
5)
掌握Zipkin与Spring Cloud Sleuth的集成方式
6)掌握Zipkin与Elasticsearch的集成方式 7)
掌握在万信P2P项目中集成服务链路追踪
1.
服务调用链路追踪概述
问题分析
随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,每个服务变得越来越简单、纯
粹,而复杂度被转移到了多个服务间协作的整体架构层面,各微服务间的调用关系也变得越来越复杂。
通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,
这个过程就产生了一个服务调用链路。
左图展示的是单体应用,在同一个进程中不同业务模块的相互调用;右图展示的是微服务架构,微服务
间通过rest调用协作实现业务流程。随着业务的不断扩张,服务之间互相调用会越来越复杂,最终,它
们可能变成了下面这样:
即使作为分布式系统的设计者、开发者,也很难清楚的说出某个服务的调用链路,况且服务调用链路还
是动态变化的。在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用
链路,一次请求少则经过三四次服务调用完成,多则跨越几十个甚至是上百个服务节点。
在这样的前提下,每条链路中任何一个依赖服务出现延迟过高或者错误都有可能引起请求最后的失败。
并且,当整个请求变慢或不可用时,我们是无法得知该请求是由某个或某些后端服务引起的。
解决方案
1. 如果发生了上面所描述的情况该怎么办呢?在这种情况发生时,我们至少需要得到以下信息用于分
析并得出最优的解决方案:
(1) 服务调用依赖图,用于了解本次请求需要经过哪些服务才能顺利完成,可进行梳理服务依赖关系
以及优化,如下图:
(2) 服务调用链路错误信息,若请求出现错误,快速定位哪个环节出现问题,各个调用环节的可用性
分析,并优化,如下图:
(3)
服务调用链路中各阶段的耗时信息,若请求出现延迟,可进行性能分析,并优化,如下图:
如果以上三点信息我们得不到,那问题的解决也就不从下手。例如:我是一名地下党狙击手,要利用日
本军官外出的机会干掉他,那我就必须获得哪些情报?...外出路线?
...自行脑补...
...
2.
因此,如何获取以上三点信息至关重要。有什么解决方案呢?我们想到可以在合适的位置(例如:微服
务调用的前后)记录日志,然后对日志进行汇总、分析,即可获得以上三点信息,但是日志数据是纯文本,
不便于观察,如果对日志进行汇总、分析时能支持图形化输出展示就更好了,这样就慢慢形成了一个成
熟完善的服务调用链路追踪系统。简单来说,服务调用链路追踪系统就是用来在生产环境跟踪、记录问
题的,可以直观的看出每个service之间的调用关系和消耗的时间。
追踪日志举例:
请求追踪编号
服务
方法
执行前时间
执行完成时间
1201
服务A
send
1458702548786000
1458702548886000
1201
服务B
receive
1458702548926000
1458702549526000
追踪日志必须要有一个请求追踪编号来表示多条日志为一个请求触发的多个服务调用,并记录执行的服
务、方法执行前时间戳、执行完成时间戳等信息。以上追踪日志表示:编号为1201的这次请求经历了服
务A.send()、服务B.receive来完成整个请求链路。
3.
服务调用链路追踪系统怎么实现呢?这个咱们就不需要自己动手了,行业中已经有成熟的框架或产
品了。
Spring
Cloud
Sleuth+
Zipkin
是java开源体系中成熟的服务调用链路追踪方案,其中Spring
Cloud
Sleuth以jar的形式嵌入在
应用程序中,完成对追踪日志的采集并上报至Zipkin,Zipkin对所有服务上报来的日志进行汇总,分析,
最终以图形化的形式展示给用户。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
#是否开启sleuth
spring.sleuth.enabled=true
2. Spring Cloud Sleuth
快速上手
Spring
Cloud
Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位
某个服务的问题。简单来说,Sleuth相当于调用链监控工具的客户端,集成在各个微服务上,负责产生
调用链监控数据。Spring
Cloud
Sleuth
可以结合Zipkin,将信息发送到Zipkin
Server,利用Zipkin来存
储和展示数据(见上图)。
要在项目中使用Sleuth,只需要两步即可:
1.
引入maven依赖
2.
spring boot 配置
剩余27页未读,继续阅读
资源评论
小小哭包
- 粉丝: 1899
- 资源: 3860
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- onenet_chongwukanhu_v06.apk
- 2022NOC软件创意编程赛项真题C++初中-决赛(有解析)
- 2022NOC软件创意编程赛项真题python初中-决赛(有解析)
- openLayer-本地数据加载 (day5)
- A题-正弦信号发生器.xdf
- 2022NOC软件创意编程赛项真题python小学高年级-决赛(有解析)
- mathml转换latex需要的xsl文件
- 2022NOC软件创意编程赛项真题图形化小学高年级-决赛(有解析)
- gbase驱动下载gbase-connector-java-8.3.81.53驱动下载
- 2022NOC软件创意编程赛项真题图形化小学低年级-决赛(有解析)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功