简介: PTS 结合 10 多年来阿里的全链路压测的经验,让阿里云的用户可以如同享用满汉全席般的享用全套标准的全链路压测,也可以根据自己的需求,选择最适合自己的方式。
作者:子矜
客户的故事
全链路压测被誉为大促备战的 “核武器” ,如果之前有关注过阿里双 11 相关的技术总结,对 “全链路压测” 一定不会陌生,这个词的出场率几乎 100%。从对双 11 稳定性的价值来看,用 “核武器” 来形容全链路压测毫不为过。
在某知名电商大促中,该电商平台也想用全链路压测来为自己的大促提前排除风险。但是他遇到几个困难:
- 全链路压测是一个需要多角色参与的活动:业务方,测试,运维,研发,数据库,都需要参与进来。然而能够像阿里具备成熟的组织体系,可以强有力的推动各种不同的角色,都是需要较长时间来积累的。
- 全链路压测,常常涉及到框架的改造:而该电商平台的业务复杂,做结构梳理与业务改造并不现实。
那这个知名电商平台,有什么办法可以在 1 个星期之内,不进行业务改造,不改变业务部署,就能够用上全链路压测呢?
接下来的内容,我们会从全链路压测的原理开始,并引入基于同样原理的 “敏捷版” 全链路压测,让该知名电商平台能够在 2 周之内就能用上全链路压测的方案。
全链路压测
首先,我们来看看阿里的全链路压测,到底解决了什么问题:
全链路压测实际上解决的问题是:在线上的压测。线上压测,能够最快、最直接的发现线上的问题。然而,线上压测会带来数据污染的问题:如何把压测数据和真实数据区分开来,是压测里至关重要的一点。那么,阿里是怎么做的呢?我们一起来看下图:
在这里,PTS 把整个流程进行沉淀,都以标准化的输出来提供给云上的用户。用户可以直接享用一整套的全链路压测体系,也可以在压测的关键环节:例如场景梳理、请求构建、压测环境、压测等步骤中,根据自己的需求来定制自己想要的压测效果。
场景梳理
业务场景,即对应的是压测的输入请求。这是压测第一步,也是最重要的一步。最常见的是把涉及到业务的 URL 进行梳理,汇总。例如下图就是一个常见的场景汇总:
这些 URL 之间的关系、时间点,需要人员有丰富的业务知识才能梳理清楚。为此,PTS 提供服务端流量录制的功能,方便用户来录制流量,并且轻松的得到其中不同维度的比例关系:
测试数据构造
接下来,就是构造用户数据了。这一步涉及的角色最多,也最为繁琐。整个数据构造由三个步骤构成,如下图所示:
数据闭包
有了这些数据表,并且在这基础之上分析出来数据闭包后,我们可以开始制作压测数据了。通常,我们制作影子表的方式有三种:
- 影子库 – 全量的进行影子库映射。该方法的优势是简单,劣势是消耗资源多;
- 影子表 – 将表闭包里的表,通过一定规则,进行名字关联。该方法的优势是节省资源,劣势是需要对表进行充分梳理,并且一一对应;
- 不新建表,在同一张表内,将影子数据进行大位移偏移。这个将在后面的敏捷版内进行介绍。
数据导入/混扰
有了这些前提之后,我们可以利用 DMS 来数据导入,进行数据制作了。
接下来我们通过数据加工,把这两个元素最终加工为压测数据。
数据加工
此时,我们对压测数据做最后一个步骤,进行数据加工。即我们把业务场景、压测数据,按照我们的业务模型进行最后的调整与加工:
到这里,我们可以看到,全链路压测的压测请求,都已经成型了。接下来,我们可以开始设计压测流量在压测对象中的行为了。
测试环境
压测可以在仿真环境、线上环境中进行。不同的环境,选取数据,制造数据都有不同的考量。如下图所示:
传统全链路压测
下图简单的诠释了传统全链路压测的运作方式;
- 如果应用使用到的框架不标准,则需要进行适配;
- 推动开发安装 agent 的流程复杂;
- 验证 agent 的覆盖面复杂。
敏捷版的全链路压测
如果我们不想要改造业务,也不想要挂载 agent,我们能如何去做到这一点呢?
我们来看一下抽样测试的原理。在测试的时候,通常有一种手段,即通过选取几个特定的真实用户数据来进行测试,来验证程序的正确性;如果我们把这些真实用户数据,变成假用户,那么需要满足下面这个关键条件:假用户以及假用户在这个业务场景下涉及到的业务数据,以及业务场景下相关的数据,都能够被识别出来。
例如,我们模拟一个假用户,购买某个假商品,这里的用户,商品,都能够有一个特定的特征,这个假用户生成的浏览记录、购买记录,在数据库的表现中都有该用户的 ID;在这个前提下,我们是能够把脏数据从真实数据中识别出来的;
- 完整的找出业务涉及到的数据表 – 参考上一章节里面的PTS SQL录制功能;
- 制作影子数据 – 和传统全链路压测不一样,这里我们选取的是第三种方式,即在一张表里做大位移,而不是制作影子表或者影子库。压测结束后,根据影子数据的特征,巡检数据库并且进行清理;
这种方式,是基于使用者对业务有清晰的了解,制作出来的压测数据有明显的压测标识(比正常数据大的多的偏移量),所有涉及的写压测,都带有这些偏移量;这样,所有压测产生的数据,都能够被识别出来。压测结束之后,根据这个数据特征,来清理压测数据;
流量引擎的选择
为了更好的模拟用户的行为,我们常常会使用压测地域的定制。但是把压测引擎部署到全国各地是不现实的;而PTS 可以方便的让用户选择地域的发起,如下图所示:
总结
PTS 结合 10 多年来阿里的全链路压测的经验,让阿里云的用户可以如同享用满汉全席般的享用全套标准的全链路压测,也可以根据自己的需求,选择最适合自己的方式。
原文链接
本文为阿里云原创内容,未经允许不得转载。