阅读全文需 10 分钟,篇幅较长,但内容很具有参考价值,请耐心读完,原文发表于本人公众号内。

1. 前言

本文是公号内性能专题,更新的第四篇,前三篇可参照上述。本想从理论到实践,以循序渐进的形式为大家分享介绍性能的知识体系,《性能专题之服务端测试》这部分,内容其实已经编写整理差不多了,完整文章列表如下:

但从前三篇的反馈来看,貌似大部分读者对理论的部分并不太感兴趣。虽然说实践很重要,但如果缺乏理论基础,真正实施起来也会变得毫无章法。

考虑到公号内大部分读者的偏好,本次推文,将作为服务端性能测试理论这部分的最后一篇《性能测试实施全过程指南》。从下一篇开始将结合服务端性能测试的两款常用工具进行工具实战操作:Jmeter 和 Locust。

关于 Locust 框架连载内容提前预告:

看到框架大纲,就问你期不期待,对于内容期待的读者,可在下方留言。

2. 开篇:总体策略

通过制定性能测试实施指南,从技术角度对性能测试实施过程中所涉及到的关键技术进行规范,能更好地从技术上来规避系统上线后的风险、评估线上系统的真实能力、根据业务模型摸底线上能力以提前应对。

该篇的性能测试实施指南,基本能适用于所有需要性能测试的项目。对性能测试实施过程能起到非常重要作用,整个实施过程主要包括有:

3. 系统环境

3.1 分析

系统环境常分为生产环境、测试环境等。两个环境的方案各有其优缺点,生产环境衡量的精准度较高,参考效果更好,但是需要清理相关的测试数据(同时要保证数据删除的完整性,基础数据的构造参考后续数据量部分)或者 BI 统计的时候过滤,或者更彻底的方案是参考阿里首创的全链路压测方式,生产环境的压测尽量挑选在低峰期进行,避免对生产业务造成影响。

单独的测试环境风险可控,难点在环境的构建上,规模和生产一致的成本也是最高的,所以一般而言有通过等比构建(1/2,1/4,1/8 等),甚至是生产环境中部分应用独立部署测试集群,数据库共用的方式,此外测试环境需要从生产环境中导入脱敏的基础数据,比如至少是最近半年或者 1 年的,保持其整体的数据关联性,这个对于压测的准确度和参考性也很重要。

3.2 风险

测试环境的风险主要体现在跟生产的差异度,测试结果的参考价值会打一定程度的折扣,可以视自身情况选择合理的方式,比如看重入口网络的检验的,可以测试环境和生产环境共享入口。对测试环境系统平台、中间件、数据库等不熟悉和了解,也会导致瓶颈不易分析、不易调优等。

3.3 测试环境预研

测试环境调研,需要调研如下内容:

3.4 测试环境搭建

在熟知以上问题的前提下,测试环境搭建应尽量满足如下规范:

4. 测试指标

4.1 分析

详细的测试指标,可参考:性能专题:一文搞懂性能测试常见指标

一般来说,会将测试指标分为:业务指标、资源指标、应用指标、前端指标

4.2 风险

不同用户对指标类型和期望值是不一样的,需要提前针对不同角色的人员进行指标调研,设定阈值,测试出系统在阈值下的性能,瓶颈定位及调优。未提前关注测试指标,将会导致测试结果不是相关人员需要的,结果是无效的。

不同用户对指标类型和期望值是不一样的,需要提前针对不同角色的人员进行指标调研,设定阈值,测试出系统在阈值下的性能,瓶颈定位及调优。未提前关注测试指标,将会导致测试结果不是相关人员需要的,结果是无效的。

4.3 业务指标

业务响应时间 (Response Time):这个指标所有相关人员都明白其含义,业务部门更需要此指标的具体值,一般情况下,不同系统的业务响应时间期望值是不同的,1秒以内最佳;像淘宝系统业务RT基本在几十毫秒以内。

业务处理能力(Transaction Per Second): 这个指标是衡量系统的处理能力的一个非常重要的指标,TPS 可以参照同行业系统和结合具体业务,中小企业 TPS 值为 50~1000 笔/秒,银行 TPS 值为 1000~50000 笔/秒,淘宝 TPS 值为 30000~300000 笔/秒。

成功率: 这个指标是衡量系统处于压力下,业务的成功率,一般业界成功率要大于 99.6%。

4.4 资源指标

一般情况下,系统资源指标也不能超过瓶颈值,例如 CPU 资源利用率<=75%,内存无 SWAP, 磁盘和网络 I/O 不能自身处理能力。理想的情况下,当系统压力上不去的时候,资源成为瓶颈(正常情况下,非其他瓶颈情况下导致),这样的话加资源,系统处理能力还会上升的,但是遗憾的是,很多系统性能测试资源都没达到瓶颈的时候,压力就上不去了。

5. 业务模型

5.1 分析

系统有很多业务,每种业务逻辑和业务量是不一样的,消耗系统的资源也不一样,因此业务种类、业务占比决定了系统的处理能力,业务模型在性能测试中起着关键性的作用。以电商场景为例,不同的促销形式和主推的类目决定了不同的容量整体配比,那么精准地将流量落地在 PTS 上进行压测拿到系统的木桶最短板可以更好的利用机器资源达到业务目的。

5.2 风险

业务模型中业务和占比选取不对,跟生产差异非常大,直接导致测试结果没有任何参考价值,并且容易误导对系统处理能力的判断。有些业务的业务量虽然占比很低,但一旦突变,对系统也是致命的,这些业务在性能测试中也需要关注。

5.3 规范

系统中的典型业务如何选取一般情况下遵循的规则是选取业务量高的、经常使用的、有风险的、未来有增长趋势的业务作为系统的典型业务。已经上线的系统可以通过高峰时段历史业务量和生产问题性能来评估,对于即将上线的系统可以通过调研和单交易资源消耗的结果来评估。

5.4 已上线系统

5.5 未上线系统

6. 数据量

6.1 分析

数据量主要包括基础数据量(或者叫历史数据量、垫底数据量、数据库中已有的数据量)和参数化数据量,数据量在性能测试中起到非常重要的作用。对于在数据库中只有几条记录和有几亿条记录里面查询信息,那么结果肯定相差非常大的,随着业务量的增长,记录也越来越多,因此使用性能测试环境时,需要保持跟生产上相同级别的数据量;如果采用在生产环境中插入测试账户的方式,可以一定程度解决环境真实性和基础数据量同量级的问题。阿里全链路压测的方式对于基础数据量的要求和上述类似。然后,我们在测试的时候需要考虑参数数据量的大小和数据分布的问题。

6.2 风险

如果基础数据量跟生产环境的基础数据量不在同一个数量级上,将会导致相关指标例如响应时间比生产上快很多,不真实,甚至导致测试结果没有参考意义。如果参数化数据量过少、未考虑数据分布的情况,将会导致测试结果不真实,甚至测试结果没有参考意义。生产环境中插入测试账户的方式,需要考虑数据准备的完整性问题,还有清理的逻辑需要完整。全链路压测的方式需要投入较大的改造成本,同时包括后续的持续迭代维护。

6.3 基础数据量

如果是测试环境,基础数据量需要跟生产环境基础数据量保持在同一个数据量级上,一般情况下需要考虑未来三年数据量增长趋势,如果增长过快需要在测试环境造非常多的数据。

6.4 参数化数据量

7. 测试类型

7.1 分析

测试类型主要分为负载测试、压力测试、单交易基准测试、混合交易负载测试(容量测试)、混合交易稳定性测试、混合交易可靠性测试、批量测试等。每种测试类型针对不同的目的,可以根据生产系统现实情况进行选择。

7.2 风险

缺少某种测试类型,将会导致现实生产系统某种场景没有测到,发生风险,例如:系统崩溃、响应时间慢等。

7.3 规范

如果时间充足,建议大部分测试类型都需要测试一下,也可以参考以下规范:

8. 串联链路

8.1 分析

串联链路是指一组含有某种业务含义的压测 API 的有序集合(类似事务),串联链路是用来模拟用户侧的业务操作,模拟的正确与否直接影响着系统的性能,模拟业务操作的时候,需要参数化数据。

8.2 风险

业务没有做成功或业务逻辑与实际生产环境差距太大将会导致测试结果没有参考价值。

8.3 规范

9. 场景

9.1 分析

压测场景是若干个基于 HTTP/HTTPS 的 URL/API 的组合,用于模拟现实生产环境中业务场景,包括施压模式、压力递增方式、运行时间等。场景模拟需要跟生产上场景相一致,特别是在一段时间内,测试出来的各业务 TPS 占比跟生产上高峰时候业务占比一致。

9.2 风险

场景的风险主要体现在测试出来的业务 TPS 占比需跟生产上业务占比一致,在业务比例偏离严重的情况下,将会导致测试结果不真实或者无效,不能反映生产上的业务场景。

9.3 规范

测试结果中各业务 TPS 占比需跟生产上业务占比(业务模型)相一致,如何才能保证一致呢?可以使用 PTS 特有的 RPS 模式(Request Per Second,直接测试吞吐能力):例如:A 和 B 两笔业务,占比为 1:4,响应时间分别为 1ms,100ms,那么只需要通过 PTS 给 A 和 B 两个接口按照 1:4 比例设置请求数(TPS)施压即可;如果使用传统的并发模式,A 和 B 的并发需要经过换算确保比例是 1:400,使得最终与生产上保持一致的业务模型。

10. 监控

10.1 分析

监控的目的主要是为进行性能测试分析服务的,完善的对系统进行监控,针对瓶颈定位起到” 事半功倍” 的效果。一般来说,需要针对操作系统、中间件、数据库、应用等进行监控,每种类型的监控尽量指标全面。

10.2 风险

没有完善的系统监控,将会导致性能分析无从下手,定位不出系统瓶颈,根本不知道从哪进行调优。

10.3 规范

操作系统:CPU(User,Sys,Wait,Idle) 利用率,内存利用率 (包括 Swap),磁盘 I/O,网络 I/O,内核参数等

中间件:线程池、JDBC 连接池、JVM(GC/FULL GC/堆大小)

数据库: 效率低下 SQL、锁、缓存、会话、进程数等

应用:方法耗时、同步与异步、缓冲、缓存

一般可以配合 APM 工具(如 ARMS)进行中间件、数据库、应用层面的问题定位。

11. 瓶颈分析

11.1 分析

瓶颈定位的目的是对系统中存在的瓶颈点进行分析,为调优做准备,系统的性能瓶颈点主要分布在操作系统系统资源、中间件参数配置、数据库问题以及应用算法上,对于有针对性的进行调优,有利于系统性能的提升。

11.2 风险

当系统的瓶颈点不能被分析出来以后,新业务上线或者核心业务就存在风险,这种风险有可能导致业务高峰的时候,系统性能体验差,甚至 “崩溃”。

11.3 规范

分析系统的瓶颈点遵循的规则如下:

12. 调优

12.1 分析

调优的目的是提升系统的性能,针对系统的 “瓶颈点” 对症 “下药”,通过测试验证系统的性能有多大的提升。

11.2 风险

未进行调优的系统,系统上线后,可能会出现客户体验差的效果,甚至导致系统 “崩溃” 的风险。

11.3 规范

系统调优遵循的规则如下:

更多更优质的资讯,请关注我,你们的支持会鼓励不断产出分享更多更好的优质文章,最后,公号「测试开发技术」后台回复 me, 免费领取全栈工程师进阶高清图谱。


↙↙↙阅读原文可查看相关链接,并与作者交流