暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SA实战 ·《SpringCloud Alibaba实战》第15章-链路追踪:核心原理与解决方案

冰河技术 2022-05-19
253

大家好,我是冰河~~

一不小心《SpringCloud Alibaba实战》专栏都更新到第15章了,再不上车就跟不上了,小伙伴们快跟上啊!

注意:本项目完整源码加入 冰河技术 知识星球即可获取,文末有入场方式。

在《SpringCloud Alibaba实战》专栏前面的文章中,我们实现了用户微服务、商品微服务和订单微服务之间的远程调用,并且实现了服务调用的负载均衡。也基于阿里开源的Sentinel实现了服务的限流与容错,并详细介绍了Sentinel的核心技术与配置规则。

同时,简单介绍了服务网关,并对SpringCloud Gateway的核心架构进行了简要说明,也在项目中整合了SpringCloud Gateway网关实现了通过网关访问后端微服务,另外,也基于SpringCloud Gateway整合Sentinel实现了网关的限流功能,并且详细介绍了SpringCloud Gateway网关的核心技术。

今天,正式进入链路追踪章节,本章,就简单介绍下分布式链路追踪技术与解决方案。

本章概述

随着互联网的不断发展,企业的业务系统变得越来越复杂,原本单一的单体应用系统已经无法满足企业业务发展的需要。于是,很多企业开始了对项目的分布式与微服务改造,新项目也在开始的时候就会采用分布式与微服务的架构模式。

一个系统采用分布式与微服务架构后,会被拆分成许多服务模块,这些服务模块之间的调用关系错综复杂,对于客户端请求的分析与处理就会显得异常复杂。此时,就需要一种技术来解决这些问题,而这种技术就是分布式链路追踪技术。

分布式链路追踪

随着互联网业务快速扩展,企业的业务系统变得越来越复杂,不少企业开始向分布式、微服务方向发展,将原本的单体应用拆分成分布式、微服务。这也使得当客户端请求系统的接口时,原本在同一个系统内部的请求逻辑变成了需要在多个微服务之间流转的请求。

单体架构中可以使用AOP在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间,使用 AOP捕获异常也可知道是哪里的调用导致的异常。

但是在分布式微服务场景下,使用AOP技术是无法追踪到各个微服务的调用情况的,也就无法知道系统中处理一次请求的整体调用链路。

另外,在分布式与微服务场景下,我们需要解决如下问题:

  • 如何快速发现并定位到分布式系统中的问题。
  • 如何尽可能精确的判断故障对系统的影响范围与影响程度。
  • 如何尽可能精确的梳理出服务之间的依赖关系,并判断出服务之间的依赖关系是否合理。
  • 如何尽可能精确的分析整个系统调用链路的性能与瓶颈点。
  • 如何尽可能精确的分析系统的存储瓶颈与容量规划。
  • 如何实时观测系统的整体调用链路情况。

上述问题就是分布式链路追踪技术要解决的问题。所谓的分布式链路追踪,就是将对分布式系统的一次请求转化成一个完整的调用链路。这个完整的调用链路从请求进入分布式系统的入口开始,直到整个请求返回为止。并在请求调用微服务的过程中,记录相应的调用日志,监控系统调用的性能,并且可以按照某种方式显示请求调用的情况。

在分布式链路追踪中,可以统计调用每个微服务的耗时,请求会经过哪些微服务的流转,每个微服务的运行状况等信息。

核心原理

假定三个微服务调用的链路如下图所示:Service 1 调用 Service 2,Service 2 调用 Service 3 和 Service 4。


那么链路追踪会在每个服务调用的时候加上 Trace ID 和 Span ID。如下图所示:


小伙伴注意上面的颜色,相同颜色的代表是同一个 Span ID,说明是链路追踪中的一个节点。

  • 第一步:用户端调用 Service 1,生成一个 Request,Trace ID 和 Span ID 为空,那个时候请求还没有到 Service 1。
  • 第二步:请求到达 Service 1,记录了 Trace ID = X,Span ID 等于 A。
  • 第三步:Service 1 发送请求给 Service 2,Span ID 等于 B,被称作 Client Sent,即用户端发送一个请求。
  • 第四步:请求到达 Service 2,Span ID 等于 B,Trace ID 不会改变,被称作 Server Received,即服务端取得请求并准备开始解决它。
  • 第五步:Service 2 开始解决这个请求,解决完之后,Trace ID 不变,Span ID = C。
  • 第六步:Service 2 开始发送这个请求给 Service 3,Trace ID 不变,Span ID = D,被称作 Client Sent,即用户端发送一个请求。
  • 第七步:Service 3 接收到这个请求,Span ID = D,被称作 Server Received。
  • 第八步:Service 3 开始解决这个请求,解决完之后,Span ID = E。
  • 第九步:Service 3 开始发送响应给 Service 2,Span ID = D,被称作 Server Sent,即服务端发送响应。
  • 第十步:Service 3 收到 Service 2 的响应,Span ID = D,被称作 Client Received,即用户端接收响应。
  • 第十一步:Service 2 开始返回 响应给 Service 1,Span ID = B,和第三步的 Span ID 相同,被称作 Client Received,即用户端接收响应。
  • 第十二步:Service 1 解决完响应,Span ID = A,和第二步的 Span ID 相同。
  • 第十三步:Service 1 开始向用户端返回响应,Span ID = A、
  • Service 3 向 Service 4 发送请求和 Service 3 相似,对应的 Span ID 是 F 和 G。可以参照上面前面的第六步到第十步。

把以上的相同颜色的步骤简化为下面的链路追踪图:


  • 第一个节点:Span ID = A,Parent ID = null,Service 1 接收到请求。
  • 第二个节点:Span ID = B,Parent ID= A,Service 1 发送请求到 Service 2 返回响应给Service 1 的过程。
  • 第三个节点:Span ID = C,Parent ID= B,Service 2 的 中间解决过程。
  • 第四个节点:Span ID = D,Parent ID= C,Service 2 发送请求到 Service 3 返回响应给Service 2 的过程。
  • 第五个节点:Span ID = E,Parent ID= D,Service 3 的中间解决过程。
  • 第六个节点:Span ID = F,Parent ID= C,Service 3 发送请求到 Service 4 返回响应给 Service 3 的过程。
  • 第七个节点:Span ID = G,Parent ID= F,Service 4 的中间解决过程。

通过 Parent ID 就可找到父节点,整个链路即可以进行跟踪追溯了。

备注:核心原理部分内容来源:cnblogs.com/jackson0714/p/sleuth_zipkin.html

解决方案

目前,行业内比较成熟的分布式链路追踪技术解决方案如下所示。

技术说明
Cat由大众点评开源,基于Java开发的实时应用监控平台,包括实时应用监控,业务监控 。集成方案是通过代码埋点的方式来实现监控,比如:拦截器,过滤器等。对代码的侵入性很大,集成成本较高。风险较大。
ZipKin由Twitter公司开源,开放源代码分布式的跟踪系统,用于收集服务的定时数据,以解决微服务架构中的延迟问题,包括:数据的收集、存储、查找和展现。结合spring-cloud-sleuth使用较为简单, 集成方便, 但是功能较简单。
PinpointPinpoint是一款开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件, UI功能强大,接入端无代码侵入。
SkywalkingSkyWalking是国人开源的基于字节码注入的调用链分析,以及应用监控分析工具。特点是支持多种插件, UI功能较强,接入端无代码侵入。
SleuthSleuth是SpringCloud中的一个组件,为Spring Cloud实现了分布式跟踪解决方案。

注意:在《SpringCloud Alibaba实战》专栏中,我们后续会使用 Sleuth+ZipKin的方案实现分布式链路追踪。

好了,本章的内容还是比较简单的,就是对分布式链路追踪技术做个简单的介绍,下一章,我们就开始实战分布式链路追踪技术了。小伙伴们,你们准备好了吗?

好了,今天我们就到儿吧,限于篇幅,文中并未给出完整的案例源代码,想要完整源代码的小伙伴可加入【冰河技术】知识星球获取源码。也可以加我微信:hacker_binghe,一起交流技术。

另外,一不小心就写了15章了,小伙伴们你们再不上车就真的跟不上了!!!

关于星球

最近,冰河创建了【冰河技术】知识星球,《SpringCloud Alibaba实战》专栏的源码获取方式会放到知识星球中,同时在微信上会创建专门的知识星球群,冰河会在知识星球上和星球群里解答球友的提问。

今天,【冰河技术】知识星球再开放200张优惠券,还没上车的小伙伴赶紧啦,再不上车就跟不上啦!!


特别提醒: 苹果用户进圈或续费,请「hacker_binghe」扫二维码,或者去公众号「冰河技术」回复「星球」扫二维码进圈。

最后,小伙伴们可以在 冰河技术 公众号回复 “ 星球 ” ,领取入场优惠券。

好了,今天就到这儿吧,我是冰河,我们下期见~~

硬核专栏
推荐👍:《精通高并发系列
推荐👍:《架构师进阶系列
推荐👍:《一起进大厂系列
推荐👍:《性能调优系列
推荐👍:《深入理解JVM系列
推荐👍:《精通分布式事务系列
推荐👍:《Spring注解系列
推荐👍:《吃透MySQL系列
推荐👍:《Java8新特性
推荐👍:《精通Nginx系列

往期推荐

推荐👍发现一个超硬核学习宝藏!爱了!爱了!

推荐👍实践出真知:全网最强秒杀系统架构解密!!

推荐👍高并发分布式锁架构解密,不是所有的锁都是分布式锁!

推荐👍这部电子书凭什么短短几个月全网累计下载突破16万?(目前已破50W+)

推荐👍《,冰河又写了一本电子书!!

---END---

后台回复 “并发编程” 领取冰河原创的全网累计下载超50W+的《深入理解高并发编程》电子书。回复 “渗透笔记” 领取冰河原创的全网首个开源的以实战案例为背景的《冰河的渗透实战笔记》电子书。回复 “PDF” 领取冰河整理的其他8本超硬核PDF电子书,海量面试资料和简历模板。
冰河从一名普通程序员,短短几年时间,一路进阶成长为互联网高级技术专家,一直致力于分布式系统架构、微服务、分布式数据库、分布式事务与大数据技术的研究。在高并发、高可用、高可扩展性、高可维护性和大数据等领域拥有丰富的架构经验。对Hadoop,Storm,Spark,Flink等大数据框架源码进行过深度分析,并具有丰富的实战经验。
出版过三本畅销书《深入理解分布式事务:原理与实战》、《海量数据处理与大数据技术实战》、《MySQL技术大全:开发、优化与运维实战》。写了一本《深入理解高并发编程》电子书全网累计下载50W+,发布了一本全网首个开源的以实战案例为背景的《冰河的渗透实战笔记》电子书,全网五星好评。写的文章多次被微信公众号官方推荐。

扫一扫关注我

喜欢就点个 在看 呗 👇

文章转载自冰河技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论