You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

118 lines
13 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 开篇词 | 打破认知神话,做接地气的全链路压测
你好,我是高楼。
可能很多人已经认识我了,因为这已经是我在极客时间开设的第三门课程了。这次,我想和你聊聊全链路压测。
回顾从业十几年的经历我一直在做性能测试、性能分析、性能优化的工作。早年间我在各大测试论坛分享自己的工作经验并形成了关于性能测试完整的知识链。后来我开始自己带团队做项目完整做过40多个项目团队也从最初的四五个人到300 余人。与我合作过的人都了解,我做性能项目的宗旨就是上线不死,死了不收钱。
2019年我的第一个课程[《性能测试实战30讲》](https://time.geekbang.org/column/intro/100042501)上线了2020年我又开了第二门课程[《高楼的性能工程实战课》](https://time.geekbang.org/column/intro/100074001)。在这两个课程中,我描述了我认为在测试过程中重要的部分,比如整体概念梳理、性能分析思路等。
我希望通过这两个课程,可以抛出一个价值观:**让性能变得有价值。**我希望更多的人知道,性能如果只是停留在“测试”的层面,根本不能发挥它本该具有的价值,“调优”也是非常重要又不可忽视的部分。
对于一个企业级性能项目来说,性能的价值是给出结论数据,判断出系统的最大容量、稳定性运行时长。但是,大部分企业的性能项目做得如同儿戏一般,只有最简单的验证,系统资源大量闲置,而调优的动作几乎没有。当然了,也有可能是因为他们并不知道怎么做。但无论如何,这样的系统匆忙上线,一定会浪费大量不必要的资源。至于一个性能人员能把性能做得多深入,就取决于个人的努力了。
我还提出过一个重要的概念就是“RESAR性能工程”。“RESAR 性能工程”这个名字是我自己起的,你不用去网上搜索,因为现在还搜不到。它对性能项目过程中的各个具体的动作做了更详细的描述,使之成为可以落地的具体实践。
![](https://static001.geekbang.org/resource/image/yy/c1/yy23853dd67da65539483294077dfdc1.jpg?wh=1920x1010)
在前两个专栏,我一直强调**把性能从“测试”思维转换到“工程”思维**。这个思维的转变,涵盖了性能项目的全流程,不仅有技术的细节,还有需求、模型、监控、分析的完整逻辑。只有这个逻辑完整了,性能才能做得有价值。
在我看来全链路压测只是性能容量场景中的一个具体案例。它并没有跑出“RESAR性能工程”的范围。RESAR性能工程中的所有逻辑思维都将在这个全链路压测的专栏中落地实践。
不过如果你没有看过上一个专栏也没有关系,你可以先看看我在上面给出的思维导图,了解一下它具体分为哪些板块。在项目具体落地的过程中,我也会把每个模块略作介绍,保证不让你有蒙圈的感觉。
![](https://static001.geekbang.org/resource/image/c1/94/c1f2f43415a39498b3a2a573df6cdc94.jpg?wh=1920x1015)
你可能会问既然全链路压测的逻辑已经包含在RESAR性能工程里了为什么还要写一个全链路压测的专栏呢它和之前的专栏有什么区别和联系呢让我们先来看一下全链路压测行业的现状。
在网络上可以找得到的全链路文章中,大概可以看到阿里、有赞、饿了么、美团、滴滴、京东、字节、陌陌、达达等企业的技术文章,里面都提到了全链路压测在企业内部的落地。但他们是如何落地的,在细节上我们只能猜测一二。
## 全链路压测行业现状
在性能领域中,很多人看到全链路压测的目标和效果之后,都会觉得这是一套可以上天遁地的完整逻辑。事实是不是这样呢?看看网上能搜索到的信息,它们基本上有这么几个特点:
1. 目标和方案只有摘要级的说明。
2. 全链路压测平台的细节描述宽泛,没有完整的落地细节。
3. 只有大厂的一些笼统资料,但并没有投入成本(人员成本、资金成本、时间成本)的数据。
4. 无架构级全链路改造的细节。
5. 无架构级监控平台范围的细节。
6. 无性能分析逻辑的细节。
因此,在网上看了各种资料之后,你可能还是有很多困惑:首先,不知道自己的企业能不能支撑;其次,不知道应该如何具体实施;再者,不知道投入成本有多大。
在这些问题还没有搞清楚之前,偏偏一些企业的管理者只看效果,觉得这件事情是需要做的,于是安排了相关的任务给具体的实施层。实施层由于没有管理权限、没有成本计算能力、没有技术细节的实现能力,于是越做越觉得坑太大,填不住。只能想各种招儿来应对领导这一看似合理的安排。
举个例子,全链路压测的出发点是对线上的真实系统做改造后直接在线上压测,而一些企业根本不具备这样的条件,所以为了跟上潮流,他们只会做一些小的动作,在线上减少覆盖范围并分段进行压测。但是这个改变,其实完全失去了全链路压测的价值。
实际上,全链路的落地是要经过综合考虑后,公司上下共同努力的结果。从整个全链路项目来看,企业里从老板到最底层的工程师,都会需要参与进来。也就是说,全链路涉及老板、产品经理、架构师、开发工程师、测试工程师、运维工程师等各个角色。
不过,不同岗位的关注点是不同的。老板关注的是,全链路压测带来的业务容量提升和企业利润增长;产品经理要关注的是,业务容量的增长和后续功能的设计;架构师要关注的是,全局架构设计对全链路压测的宏观支撑;开发工程师要关注的是,业务细节和技术细节的改造;测试工程师要关注的是,覆盖住这些改造;运维工程师要关注的是,全链路改造和线上的压测过程对系统整体状态的影响。
如果你的公司打算实施全链路压测,而你刚好处在这些岗位或者对这些岗位有意向,那么我的这门课很可能对你有帮助。因为我对全链路压测是认真的,我要做的就是实战,就是**“把全链路压测拉到地面上”**,让你真正地了解它。
不过,在正式进入课程之前,我还想跟你聊聊几个你可能会关心,但是和技术无关的问题。
### 全链路压测最难的是什么?
全链路压测最难的,到底是什么呢?
是应用改造吗?是压力工具改造吗?是逻辑思维的转变吗?
在我看来,都不是。最难的应该是:**管理协调**。
由于全链路压测涉及到的团队多、系统多、链路长,这就导致了管理成本的迅速增加。
相比较而言,技术的实现就是细节的落地过程,消耗的只是人员和时间成本。
虽然我们这个技术专栏不会涉及管理协调(因为每个企业都有自己的管理逻辑,而且管理主要是和人相关,所以我无法给你一个放到不同企业都可用的管理思路),但你要记住,人员的协调非常重要,千万不可以小看它的影响。
### 全链路压测一定会涉及压力工具的改变吗?
这一点是不一定的。因为全链路压测的出现,是为了响应互联网企业大流量的需求。但是,不是所有的互联网企业都有那么大的容量需求,如果容量需求不大,是不需要改造压力工具的。
那有没有某种工具只是为了全链路压测而存在呢?答案是:没有!
因为压力工具是为了对服务端发送请求而存在的,所以不管你用传统压力工具,还是用现在市面上的所谓全链路压测工具,只要能够按需求对服务端发出请求,那就足够了。
有人说,我的全链路压测是可以基于多个公网上的压力服务器调用的,这一点和传统压力工具有很大的区别。我只能呵呵一笑,你觉得传统压力工具做不到吗?
### 全链路线下压测有没有价值?
因为全链路压测是为了满足线上环境的容量需求,所以所有的全链路相关的动作也都是基于线上环境来讨论的。但是,如果一些企业出于对制度或风险的考虑,不能或不想在线上环境做全链路压测,可不可以把全链路压测的逻辑应用于线下环境的压测呢?
答案当然是:完全可以,但是!是不是就怕看到但是?哈哈,但我还是得说:但是全链路压测如果不在线上做,那就摆脱了环境的限制,摆脱了影响生产系统的风险。
第一,“全链路”这个词强调的改造部分就不需要做了。因为改造的目的是区别压力流量和生产流量,而线下没有生产流量,所以不需要做改造。
第二,如果线下环境的业务流量需求没有线上环境要求的大,那么全链路压测强调的压测工具的分布式改造也就没必要了。
第三,如果线下环境的业务流量需求和线上环境要求的一样大,企业也愿意把线下环境搭建成和线上完全一致,那就完全可以复制全链路线上压测的逻辑。
第四,有人说,换到线下用流量复制的工具来实现线上流量的放大回放,是否也有意义呢?其实这个动作也不是非常有必要,因为如果已经在线下做了,那压力工具完全可以配置出线上的请求比例,用不用流量录制回放的压力工具无所谓,只要能按业务比例实现压力就好。
所以,你看,**全链路线下压测不是没有价值,而是付出的成本似乎不会小**。虽然应用的改造不用做了,但环境就是最大的问题。注意,这里说的环境可不仅是硬件环境堆在那里,架构部署和数据的部分也不简单。如果去除硬件和部署架构,那显然就和以前我们做的性能项目无差了。
## 这个全链路压测专栏会如何组织?
在这个全链路压测专栏中,基于“把全链路压测拉到地面上”的定位,我会这样来组织。
![](https://static001.geekbang.org/resource/image/6d/b0/6daf70b87fc6c8089236e0f09d09d8b0.jpg?wh=1920x807)
我把这个专栏分成了六个部分,分别是核心理论、实践需求、环境准备、场景执行、性能分析和结果报告。在这六个部分中,我会把全链路压测实际落地的过程,真实、详尽地记录下来。目的就是,希望让你看到全链路压测的实现细节,不再把全链路当成神话一样来崇拜。
* 在核心理论模块,我会给你概括一下全链路压测过程中需要的重要逻辑。如:改造部分的逻辑、模拟场景的逻辑等。
* 在实践需求模块,我会对性能项目中的几个重要环节进行详细说明。比如,压测方案设计、梳理核心链路、明确压测范围、数据构造、系统构造方案、性能监控等。
* 在实践环境准备模块中,我会介绍全链路压测实践环境准备工作,对全链路压测项目中,前面的环境初始化环节的实操进行说明。
* 在场景执行模块,我会带着你通过压测平台来实现全链路压测的场景。这里,我们会使用到各种不同的压力工具,比如炒得火热的流量回放工具等。
* 在性能分析模块,我会根据此项目场景执行过程中实际遇到的问题,进行具体的一步步分析,对有价值的性能问题,我会一一记录。
* 在结果报告阶段,我会写一个侧重于全链路压测视角的报告。教你怎么把压测结果以最清晰和高效的方式呈现出来。
在全链路压测项目中,这里面的每个环节都直接决定项目的成败。所以希望你能紧跟我的步伐,把握好每个细节,让项目顺利落地。
最后,我想说,如果成为一名优秀的性能工程师是你的心之所向,如果你不甘于在性能项目中因为知识的匮乏受到白眼,如果你需要可以和其他的任何一个技术岗位平起平坐的机会,如果你希望可以在下面的技术冲突中得到尊重。如果你希望在性能这条路上走得更远,那就与我一起踏上这段旅程,我会把我从业十几年来的经验毫无保留地分享给你。
好了,今天就说到这里。在课程正式开始之前,让我也认识一下你吧!关于全链路压测,你有什么心得,又有哪些积存已久的困惑?欢迎你在留言区和我交流讨论。
希望这个专栏,可以让你找到一些共鸣,助力你的技术和思维能力再攀高峰,我们出发吧!