这是付费技术合集的第十篇文章,也是更新计划内的最后一篇文章。本文大约7600字,核心内容如下图所示:
前面九篇文章,分别介绍了性能测试和自动化测试从零到一的落地实践和体系建设,以及这些技术实践开展的测试环境该如何进行稳定性治理。这篇文章作为收尾,会为大家介绍性能测试的进阶工程实践:容量保障。
性能测试一般都是在测试环境实施居多,测试结果仅能对线上服务性能和稳定性提供参考,但无法给出精确结论。在业务迭代越发快速以及系统越来越复杂的情况下,传统的性能测试方法对系统质量保障提升越来越乏力。
容量保障的优势就在于它更多的是针对线上整个系统的性能和稳定性,结合测试环境的性能测试结果,对线上系统的容量进行精准评估规划,提高稳定性,降低硬件成本。
什么是容量保障?
常规的性能测试,一般是采用不同的手段和策略去验证系统在不同业务场景下的性能表现是否满足预期指标,是否存在性能瓶颈并进行优化验证的过程。
但随着移动互联网的发展,业务场景越发多变,技术架构也随着微服务、云原生等技术的出现越来越复杂。以电商业务为例,性能测试同学经常面临这几个问题:
- GMV增长两倍,系统性能可以满足业务增长需要吗?
- 如果无法满足,扩容能否解决问题?如果扩容扩多少?
- 如果要搞双11大促,如何保障系统在大促期间的稳定性?
这些都是当前性能测试同学甚至运维、架构师面临的技术挑战,而容量保障就是为了解决此类问题的有效手段。
1、什么是容量?
软件系统是基于硬件服务器部署的,硬件服务器限于本身的配置,其本身处理能力是有限的,这点需要明确。从软件工程的角度出发,容量就是单位时间内软件系统能够承载并处理的最大业务量。
2、什么是容量保障?
理解了软件系统的容量,就可以很好地理解容量保障的工作内容了。
我们日常工作中的功能测试工作,就是保障软件功能的正确性、易用性等,当然现在也叫做质量保障。
容量保障,就是通过运用各种方法和工具,保障线上软件系统的容量可以承载并处理各种业务,并具有一定的弹性能力。
3、容量保障有哪些难题?
- 容量的不确定性:业务场景多样、技术架构复杂,导致容量在不同场景不同时间段有不同表现。
- 容量评估的复杂性:服务调用链路复杂,上下游服务彼此的制约导致很难评估出一个较为准确的预期值。
- 容量测试的不准确性:测试和生产环境的差异、服务配置差异、硬件资源差异、网络环境差异、业务场景差异。
- 容量规划治理的复杂性:业务和代码不断迭代、新技术的引入、人员流动变化都让容量规划和治理变得难上加难。
什么是容量测试?
上面的内容介绍了容量保障面临的四大难题,而容量测试,就是运用各种方法和工具在这种复杂的情况下去不断验证容量结果,最终保障线上软件系统容量可以支撑业务正常运行的过程。
这是一个持续验证的过程,相比于传统的性能测试压几个接口,得到结果,优化验证完发布上线而言,容量测试更提倡持续验证,做到对各环节的容量永不信任,持续验证,最终达到持续的保障线上系统稳定性。
当然,容量测试和传统性能测试类似的点也有很多,同样需要需求分析,场景设计,数据准备,实施压测以及性能优化。或者可以理解为,容量测试和传统性能测试并没有本质上的区别,都是为了让软件系统满足业务需要,支撑业务目标更好地达成。只是容量测试所提倡的方法和理念,更适用于当前我们所面临的环境和挑战。
常规的性能测试,是有了需求,然后进行需求分析,场景设计,数据准备,脚本编写和压测执行以及定位优化验证这些步骤,而容量测试的特点在于计划性和预期性。
可以理解为常规的性能测试更偏向先有需求再出结果,而容量测试更注重预先评估结果,针对结果进行计划性的有步骤的验证。如果分类的话,可以将容量测试要做的事情,分为如下三种情况:
- 日常事件:日常的迭代压测、性能巡检;
- 计划事件:比如新服务上线、双十一大促;
- 突发事件:比如线上流量突增、异常告警、紧急扩容;
容量测试就是为了达成容量保障目标的一种持续验证手段,要解决的问题除了日常工作中的需求,还要有计划的应对未来的需求,以及预期可能出现的容量风险并做好应对措施。
明确容量保障的目标和指标
一般来说,无论是什么技术项目,都可以拆成这几个步骤来落地:
- 明确目标和衡量结果的指标。
- 制定落地实施方案并进行验证。
- 针对验证结果进行分析是否达到预期。
- 项目完结后不断复盘迭代进行维护优化。
因此容量保障在实际工作中落地也可以遵循这几个步骤,下面的内容我也会从这几个方面来说明。
任何项目在实施前都需要明确目标和衡量指标,否则很容易失去方向,最后的结果也会南辕北辙,容量保障也不例外。同时要明确一点:任何技术都是为业务服务的,技术要支撑业务目标更好地达成,业务目标达成才能体现技术的价值。
那么容量保障的目标是什么?我认为是如下两点: