在实际的性能测试工作中,我们面临的往往是复杂的业务场景、技术架构以及突增的用户访问量,在这种情况下单纯的压测已经无法很好的解决问题。
要想很好的保障在这种复杂情况下的系统性能和稳定性,我们需要在性能测试的基础上更进一步,做好容量保障工作。
这篇文章,我们就来聊聊容量、容量保障、容量测试以及容量规划相关的话题。
一、容量
1、什么是容量?
软件系统是基于硬件服务器部署的,硬件服务器限于本身的配置,其处理能力是有限的。
容量,即系统处于最大负载状态或某项指标达到所能接受的最大阈值下对请求的最大处理能力。
具体来讲,系统的容量(处理能力)是有限的,容量是可度量的。
2、如何统计容量指标?
1)统计维度
通常可以从如下两个维度来定量系统的容量:
2)统计方法
通常采集数据的方法,有以下几种方式:
① 埋点采集:即在系统的各个节点,根据需要添加埋点,针对性的进行数据采集。
② 日志/数据库:通过日志服务(如ELK)或者运维监控(如Devops)采集分析数据。
③ Agent/探针:在需要采集的节点添加Agent/探针,实时采集;数据存入时序数据库(比如influxdb),实时展示。
3)注意事项
采集对比的数据一定要采集线上的真实数据,这样才能反映真实客观的系统压力。
二、容量保障
1、什么是容量保障?
理解了软件系统的容量,就可以很好的理解容量保障的工作内容了。
我们日常工作中的功能测试工作,就是保障软件功能的正确性、易用性等,叫做 质量保障 。
而容量保障,就是通过运用各种方法和工具,保障软件系统的容量可以承载并处理各种业务,并具有一定的弹性能力。
2、为什么需要容量保障?
随着移动互联网的发展,业务场景越发多变,技术架构也随着微服务、云原生等技术的出现越来越复杂。
以电商业务为例,性能测试同学经常面临这几个问题:
- GMV(商品交易总额)增长两倍,系统性能可以满足业务增长需要吗?
- 如果无法满足,扩容能否解决问题?如果扩容扩多少?
- 如果要搞双11大促,如何保障系统在大促期间的稳定性?
诸如上诉此类问题,都是当前性能测试同学甚至运维、架构师面临的技术挑战。而容量保障工作就是为了解决诸如此类问题的有效手段。
3、容量保障有哪些难题?
- 容量的不确定性:业务场景多样、技术架构复杂,导致容量在不同场景不同时间段有不同表现。
- 容量评估的复杂性:服务调用链路复杂,上下游服务彼此的制约导致很难评估出一个较为准确的预期值。
- 容量测试的不准确性:测试和生产环境的差异、服务配置差异、硬件资源差异、网络环境差异、业务场景差异。
- 容量规划治理的复杂性:业务场景不断变化、代码版本不断迭代、新技术的引入、人员的流动变化都让容量规划和治理变得难上加难。
三、容量测试
1、如何理解容量测试?
容量测试,是性能测试里的一部分,它的目的是测量系统的最大容量,为系统扩容、性能优化提供参考,节省成本投入,提高资源利用率。就是运用各种方法和工具在这种复杂的情况下去不断验证容量结果,最终保障线上软件系统容量可以支撑业务正常运行的过程。
这是一个持续验证的过程,相比于传统的性能测试压几个接口,得到结果,优化验证完发布上线而言。容量测试更提倡持续验证,做到对各环节的容量永不信任,持续验证,最终达到持续的保障线上系统稳定性。
当然,容量测试和传统性能测试类似的点也有很多,同样需要需求分析,场景设计,数据准备,实施压测以及性能优化。
可以理解为,容量测试和传统性能测试并没有本质上的区别,都是为了让软件系统满足业务需要,支撑业务目标更好的达成。只是容量测试所提倡的方法和理念,更适用于当前我们所面临的环境和挑战。
了解容量测试,然后忘掉各种高大上的新概念,做到持续验证持续保障即可。
2、如何做容量测试?
1)测试思路
① 根据具体的业务情况和系统架构,通过配置测试的手段,测量得到单个服务节点在对应的业务场景下最大的性能表现。
② 根据系统架构(集群、分布式、微服务)特点,通过启用≥2的服务节点,来得到服务节点的增加后系统性能的提升比例。
③ 通过线上采集的系统数据,分析出过去某段时间(或某个业务)的高峰流量,然后通过计算,得到容量扩容,需要投入的实际服务数量。
2)约束/停止条件
在测试过程中,只要限定的某项指标达到最大可接受阈值或某项资源达到最大使用状态,即刻停止测试。
3)选择合适的容量指标
考虑到业务需求和系统架构的不同,在选取容量指标时一般遵循如下原则:
- 数据密集型:即并发请求量较大的类型,一般TPS和RT(响应时间)是比较关注的指标。
- 数据存储型:即需要存储读写的数据量较大的类型,一般吞吐量和IO是比较关注的指标。
3、注意事项
容量测试环境的配置,一定要和线上保持一致(服务器数量可以不同,但配置尽可能保持一致)。
4、容量测试解决了什么问题?
常规的性能测试,是有了需求,然后进行需求分析,场景设计,数据准备,脚本编写和压测执行以及定位优化验证这些步骤,而容量测试的特点在于计划性和预期性。