04 | 核心链路:如何梳理符合真实业务场景的核心链路?

你好,我是高楼。

上一讲,我给你展示了我认为一个完整的全链路压测方案应该具有的样子。在项目的选择上,我们使用的是开源微服务电商项目。这个项目采用的技术栈,是当前技术市场中流行的主流微服务技术栈,所以很可能对你也有借鉴意义。

这节课,我们还是用这个项目来讲讲,怎么梳理出符合真实业务场景的核心链路。

我们知道,在完整的企业级系统中,业务逻辑是非常复杂的。为了清晰地把业务实现到技术层面,就需要一层层地分析。

可是对一线做技术的人来说,这种做法常常会让人陷到细节里无法自拔,从而丧失全局观。所以,在做技术细节的同时,我们也很有必要再转换一下思维,从更全面的视角来观察系统。

再具体到全链路压测来看,因为我们面对的是一个完整而又复杂的线上系统,所以我们就要从架构的视角出发来分析业务链路。

不过提到架构,很多人对它并没有明确的概念,另一些人又觉得架构是个宏观的东西,无法把控。

从架构聊起

既然如此,我们就先来聊一聊,架构是个什么东西?

简单来说,架构就是一个系统的抽象描述,它包括系统中的组成元素以及元素与元素之间的关系。

既然是抽象,那不同的视角抽象出来的东西就不一样。像RUP 4+1视图,它就包括逻辑视图、开发视图、进程视图和物理视图,而场景则是用来描述他们之间的关系的。

在逻辑层面,我们经常聊到的业务架构、技术架构、部署架构等,这些都是架构的不同视角。

在实现层面,我们经常聊到的单体架构、SOA架构、微服务分布式架构、分层架构、微核架构、云架构等,这些都是从不同的技术层面来分类的。

上面说的都还只是架构的一些具体的分类。更系统地来看,技术发展到现在,已经把一个系统、完整的架构分为了四个大类,它们分别是:应用架构、技术架构、数据架构、安全架构。这是从不同的实现视角来承接业务架构的。但是这样的视角还必须落到系统中,还需要再细化到逻辑架构和物理层面,才可以最终落地。

讲了这么多架构的分类,你可能要问了,它和我们梳理业务核心链路有什么关系呢?其实讲这些是因为,链路要在架构上来画才能描述得更清楚。

那从哪种架构开始梳理业务链路更清楚呢。先来看一下,我们这个系统应用架构的逻辑图。

像这种框框画出来的图,是不是让人看一眼大概就能知道里面有什么东西了?但这张图还没有表示出具体的部署情况。如果你觉得这个图不好看,我再放一个这样的图。

图片

这个图是不是看起来逻辑架构清晰一点了?这张图虽然看起来和上一张图差不多,都是一些小方框,但已经开始偏向部署视角了。不过,我还没有画出服务之间的关系。

我们再换一个视角。

这样看起来是不是又清楚了一点?没错,这张图已经把部署视角很清晰地描绘出来了。

我这么详细地给你描述架构的不同视角,是希望你能够理解我下面的动作。我希望你能够分清楚各种不同架构的目的,因为只有理解架构才能理解链路。

梳理核心业务链路

但是,我们要梳理的是核心业务链路,上面的图却没有办法体现调用关系。那业务链路要怎么从这样的视角体现出来呢。

这时候我们就要祭出APM工具了。打个比方,对当前比较主流的微服务分布式架构来说,它的链路图是这样的。

图片

在SOA架构的时代,链路图都是记在脑子里的。因为服务没有那么多,倒也记得住。但是在微服务架构中,你很难记得住那么多服务。为了更有条理地梳理核心链路,我们就要借助链路监控工具了。

只有链路图还不行,要想梳理核心业务链路,还得知道什么是核心业务。核心业务的特点其实主要就两个:一、用得多;二、利润高。

我们先看符合“用得多”这个特点的业务。

先做一个业务接口访问的统计。

图片

截图中展示的是统计出来的业务接口,梳理下来就是这样的业务内容。

知道了是哪些业务,关键的一步就来了:你要在架构图上画出对应的链路。

我们先拿生成订单信息(在这个系统中,这个接口是最复杂的)的这个接口来说。从接口路径/order/generateOrder上来看,显然是直接访问的order接口。我们来看一下这个接口的泳道图。

图片

这张图是不是乍一看相当复杂?但如果仔细分析一下,你会发现它清晰明了。

从泳道图上,你可以直观地看到和order直接相关的服务。因为这个图比较大,看不清楚,我们细看其中一段。

图片

从细节图中可以看出,这个接口调用了Cart服务和Member服务。这样一来,这个链路就可以画成下面这样了。

如果接着往下分析,你就能知道这个接口调用的所有链路了。但是从代码中一点点去翻链路关系显然是不理智的,借助APM工具SkyWalking,我们就可以得到下面这样的图。

图片

具体用哪种APM工具你可以根据自己的习惯和需要来选,只要看到相应的结构即可。比如用Zipkin梳理出的链路图是这样的。

图片

在这些链路图中,你可以看到所有相关的服务,包括数据库、缓存等。不过,直晃晃地给一个图出来,还是没有办法说明链路。你还要画出箭头表示调用方向。

图片

为了配合上面泳道图中的内容,我只画了相关的服务。这样我们就有了一个接口的链路图了。

用这样的方法把所有的接口都梳理一遍,你会得到一组完整的调用链路关系。

这样,我们就把核心业务链路都罗列出来了。

对于有第三方调用的链路,你可以直接Mock。因为全链路压测中要屏蔽到第三方系统性能对自身系统的影响,在这一点上不用纠结。我看有些企业为了让全链路真的全起来,将第三方系统也纳入到了压测范围。从技术上说不是不可以,但是从协调上来说,就要考虑一下项目进度的风险和协调的难度了。

总结

好了,到这里,这节课的主要内容就讲完了。对于梳理核心业务链路来说,重点就是去看一个业务涉及到了哪些服务,这些服务又有哪些对应的技术组件。你可以遵照下面的思路:

  • 先看架构图,看架构图是为了了解一个系统里有哪些具体的服务和组件。
  • 再看调用链路,看调用链路是为了明确一个业务接口涉及到的具体服务和组件。
  • 最后将所有流量大的业务接口统计出来,对应每一个业务接口梳理出调用链路。这样,我们就可以确定混合容量场景会涉及到的所有服务和组件了。

这些都是我们在后续的全链路压测过程中要重点关注的部分。

课后题

在结束今天的学习之前,我还给你留了两个小问题:

  1. 你知道哪些确定业务接口的链路的方法?
  2. 对不同的容量场景是否需要独立做业务统计?

欢迎你在留言区与我交流讨论,我们下节课再见!

精选留言

  • future

    2021-10-26 21:14:19

    高楼老师的专栏最大的特点就是图文并茂,非常符合技术的思维逻辑,一条主线贯穿下来,最终形成一个树结构,希望高楼老师多出新课多出新书,把性能测试的方法论发扬光大,将行业内的最佳实践与案例通过清晰的梳理,分享给广大测试同仁。
    作者回复

    看你的留言,我都热血澎湃的。 哈哈。

    2021-11-01 12:53:16

  • Alex

    2021-10-30 21:25:31

    不管是传统的性能测试,还是现在的全链路压测,在方案准备阶段,最重要的都是梳理场景、流程、链路。性能测试的结果数据是否有效,是否能真实的反应系统整体的性能状态,很大程度上就是取决于我们在方案准备阶段对链路的梳理是否有效合理。
    作者回复

    讲的非常好。

    2021-11-01 12:46:29

  • future

    2021-10-27 15:25:40

    学习高楼老师的专栏,给我最大的感受是,性能测试是一门非常严谨的学科,不是安装个jmeter或者nmon工具拿来就用的,性能测试有一套闭环自洽的方法论,就像一个法官给罪犯定罪量刑一样,必须有充足的证据,严格遵照程序流程,既需要层层分析推演,又需要不断修正验证。做功能测试的时候找bug,我们要记录步骤截图现象给开发复现,开发fixed后,还要验证回归,但是现在内业有种很不好的风气,就是性能测试就是压测,至于操作步骤是不是经得起考验,最后结果是不是真正起到提升性能的作用,鲜有人关心。我觉得这个既是对测试本身能力的要求,更是行业规范的问题,一个行业只有真正做到优胜劣汰,大浪淘沙,才有利于行业技术的发展和深入,才能引发更多的火花和思考。很遗憾,目前国内能意识到性能测试人才培养的难度和价值的公司少之又少。
    作者回复

    你能说到这个点,就说明感受到了性能本该有的方向了。一起努力吧。

    2021-11-01 12:49:18

  • 坚持半途而废

    2021-10-26 11:38:07

    我们普通的项目也是这样梳理链路
    作者回复

    那你们普通项目做的就很好了。现在我看到的情况是有些性能测试工程师,并不清楚业务的路径。

    2021-10-27 10:16:19

  • 彬彬

    2022-05-31 11:15:26

    1、你知道哪些确定业务接口的链路的方法?
    链路追踪工具、看代码
    2、对不同的容量场景是否需要独立做业务统计?
    需要。每个业务的链路都不一样,需要针对每个业务进行链路梳理
    作者回复

    抓住重点了。

    2022-06-22 22:10:50

  • Geek_51563f

    2024-01-25 11:02:36

    老师好,如上面列出的10个接口,在设计场景的时候,这十个接口是作为单独的测试场景,还是将它们串起来作为一个全流程场景呢?
    作者回复

    先单独测试,再全流程测试。

    2024-10-10 10:45:39

  • 曹瑞华

    2023-12-09 19:17:36

    高老师讲的非常好,这90块花的值了
    作者回复

    多谢支持。

    2023-12-31 00:17:57

  • 渔歌子

    2023-10-29 11:37:55

    业务接口访问统计的那张图是通过skywalking统计的么?
    作者回复

    ELK

    2023-11-08 20:20:50

  • Return12321

    2022-06-16 18:59:26

    怎么得到泳道图?
    作者回复

    idea中有插件sequence diagram。点它就可以看到。

    2022-06-21 22:19:03

  • Geek_10fdb2

    2022-03-10 08:59:42

    那个泳道图是用什么工具画的呀
    作者回复

    idea的插件。

    2022-03-14 15:35:15