浅谈容量测试与容量规划

在性能测试中,需要根据具体的性能需求和系统架构等情况,采用不同的测试策略,其中最常见的策略就有容量测试。

这篇博客,就来聊聊容量测试以及容量规划的一些内容。。。

一、什么是容量?如何理解?

在开始之前,有一点需要知道:系统的处理能力是有限的

1、容量定义

所谓容量,即系统处于最大负载状态某项指标达到所能接受的最大阈值下对请求的最大处理能力

2、如何理解

①、系统的容量(处理能力)是有限的;

②、容量是可度量的;

二、如何统计容量指标?

1、统计维度

一般来说,可以从如下两个维度来定量系统的容量:

维度类型 列举说明
最大负载状态 服务器CPU使用率达到100%
内存使用达到最大值
磁盘IO延时超过所能接受的最大时延
磁盘使用率超过最大限制
网络使用率达到上限(最大吞吐量)
最大接受阈值 每秒请求数/事务数(QPS/TPS)
响应时间(ART/99%RT)
事务成功率(一般要求99.99%甚至更高)
超时/异常错误率
配置参数,比如:最大连接数、最大线程数、JVM内存分配上限

2、统计方法

一般来说,常用的采集数据的方法,有以下几种方式:

①、埋点采集:即在系统的各个节点,根据需要添加埋点,针对性的进行数据采集;

②、日志/数据库:通过日志服务(比如ELK)或者运维监控(现在很流行的Devops),采集分析数据;

③、Agent/探针:在需要采集的节点添加Agent/探针,实时采集,数据存入时序数据库(比如influxdb),实时展示;

3、注意事项

①、采集对比的数据一定要采集线上的真实数据,这样才能反映真实客观的系统压力。

②、容量测试环境的配置,一定要和线上保持一致(服务器数量可以不同,但配置尽可能保持一致)。

三、容量测试

容量测试是性能测试里的一种测试方法,它的目的就是测量系统的最大容量,为系统扩容,性能优化提供参考,节省成本投入,提高资源利用率。

1、测试思路

①、根据具体的业务情况和系统架构,通过配置测试的手段,测量得到单个服务节点在对应的业务场景下最大的性能表现;

②、根据系统架构(集群、分布式、微服务)特点,通过启用≥2的服务节点,来得到服务节点的增加和系统性能的提升比例;

③、通过线上采集的系统数据,分析出过去某段时间(或某个业务)的高峰流量,然后通过计算,得到容量扩容,需要投入的实际服务数量;

2、约束/停止条件

在测试过程中,只要限定的某项指标达到最大可接受阈值某项资源达到最大使用状态,即刻停止测试。

3、选择合适的容量指标

考虑到业务需求和系统架构的不同,在选取容量指标时一般遵循如下原则:

①、数据密集型:即并发请求量较大的类型,一般TPS和RT是比较关注的指标;

②、数据存储型:即需要存储读写的数据量较大的类型,一般吞吐量和IO是比较关注的指标;

四、容量规划

1、为什么需要容量规划?

对于业务越来越复杂的商业形态,每个业务都由一系列不同的系统来提供服务,每个业务系统都部署在不同的机器上。容量规划的目的在于让每一个业务系统能够清晰地知道:

①、什么时候应该增加服务节点,什么时候应该减少服务节点(比如服务端接受到的流量达到什么量级)?(比如双十一,大促,秒杀)

②、为了双 11 、促销、秒杀、渠道拓展引流等业务需求,需要扩充到什么数量级的服务,才能即保证系统的可用性、稳定性,又能节约成本?

2、容量规划四步走

①、业务流量预估阶段:通过分析历史数据以及实时的线上监控,预估未来某个时间点或者某个业务可能会有多少多少的流量冲击;

②、系统容量评估阶段:根据具体的业务场景,分析每个业务场景的流量配比,然后计算每个业务大概需要多少服务节点来提供可靠稳定的性能支撑;

③、系统容量测试阶段:通过全链路压测或者PAT/UAT环境的压测,来模拟真实的业务场景,确定每个服务节点的具体性能表现,进行针对性的调整;

④、流量分配调整阶段:根据压测的结果,设定限流、服务降级等系统保护措施,来预防当实际流量超过系统所能承受的最大流量时,系统无法提供服务;

3、扩容手段

①、垂直扩容

升级服务的硬件配置,让单个服务节点的容量更大,来提供更高的系统服务能力。比如:

加大服务机器的CPU数量和内存,更换性能更好的高速缓存服务器,数据存储用NAS盘替换等。

②、水平扩展

即增加服务节点的数量,让可提供服务的服务变得更多,来提升系统总体的服务能力。常见的方式有:

服务集群:服务器的数量由1→N(但需要重点关注负载均衡);

分布式:提供服务的节点由统一集中管理部署,分散到不同的地点;

容器:提供更灵活的弹性扩容机制,根据具体的访问流量大小来弹性扩容或者缩容;

4、更多参考

关于容量规划,可以看这里:阿里巴巴全链路压测

关于集群和分布式,看这里:分布式与集群的区别是什么?

内容仅仅是个人的一些思考和总结,如有更好的意见或建议,欢迎评论区指出,谢谢。。。

原文地址:https://www.cnblogs.com/imyalost/p/9630846.html

时间: 2024-07-28 20:20:55

浅谈容量测试与容量规划的相关文章

浅谈探索性测试

今天学习时看了一篇谈探索性测试的文章.有一点感触. 探索性测试如果在测试策略层面应该和应变式的测试策略相符合. 暂且不谈探索性测试的方法以及那些利弊. 只是简单的打个比喻,反应一下我对探索性测试的认知. 农村的孩子以前都放农忙假,要求学生去拾麦穗(好像语文课本里还有相关内容,叫颗粒归仓). 探索性测试就像捡麦穗,刚割完的麦子,确实能捡到不少丢的麦穗. 但是都捡过一遍甚至几遍了,再去捡,就捡的少了. 我们平时做探索性测试的关键也在此,只做一遍. 探索这个词是最能反映人类智慧的词,很费脑细胞,不要把

浅谈APP测试经验

近年来,随着智能手机兴起,很多App软件不断涌起.那今天我浅谈一下本人在工作如何测试App软件与经验. 一.App三种开发模式介绍(测试App时,必须要先了解您测试的App是用什么模式开发的) 1.Native APP 2.Web APP 3.Hybrid AP 对App开发模式不清楚的人.请自行百度. 二.通用App测试点(这些点必须测试) 1. 使用App时,手机耗电情况: 2 .App占用手机内存情况: 3 .App安装包的大小: 4. 使用App时,流量消耗情况: 5 .App在WiFi

浅谈(接口)测试注意事项四

大概列举一下自己在工作中总结的一些关于接口测试需要考虑的内容 接口测试  checklist (检测点) 1.  正常功能: a. 只填入接口参数必填项,实现正常功能 b. 参数全部填写正常数据,实现正常功能 2. 接口背后逻辑是否正确 例如:红包领取个数接口,接口内部逻辑如何计算红包领取个数的逻辑是否正确,这个需要和开发了解具体实现逻辑,和产品了解需求,看是否一致 3. 接口所有返回类型的code及msg都要用例覆盖:返回类型的code及数据是否满足所有业务的需求 4.  异常: a.必填项字

浅谈session测试

Session 是用于保持状态的基于 Web 服务器的方法,在 Web 服务器上保持用户的状态信息供在任何时间从任何页访问.Session 允许通过将对象存储在 Web 服务器的内存中在整个用户会话过程中保持任何对象.当我们使用用户名和密码登陆网站,系统会首先验证当前登陆用户是否合法,当合法后将用户名等相关信息保存在Session 中.登陆后点击进入某功能页面时,系统也会去判断当前你是否有访问权限,判断的方式是验证Session 中的内容是否正确. 在测试的过程中,怎样去测试Session 是否

测试员浅谈App测试的重点

近年来,手机app也时持续大热.基于安卓和ios的手机app,更是受到众多投资者的青睐.而手机软件测试行业也是如此. 现在听的最多的是web测试和App测试,但实际上两者本质上没有什么区别,性质都一样! 手机上的app分为基于HTML5的app(类似于pc上的b/S应用)和本地app(类似于C/S结构).因此测试上是完全结合web的b/s和c/s测试经验. 二者在实际的测试工作中,很大的差异来自于考虑的兼容性因素. 1.web测试需要考虑自身功能的实现与浏览器的兼用性: 2.终端App测试除了要

浅谈Junit测试中反射和Jmock的应用

最近由于项目的需要,开发后的代码强制编写Junit测试,并且达到一定的coverage probility(主要应付客户).所以,为了达到一定的覆盖率,鄙人不得不在Case中大量使用反射(一般是针对private方法)和JMock(主要针对一些属性方法). 小编是做开发出身,由于对Spring的源代码有过或多或少的了解,因此对反射技术也有一定的了解.故在使用反射进行Junit测试的过程中,还算是没有遇到太多问题.小编认为,使用反射最重要的是要分清两点: 一是要反射的实现类(记住,这里的对象类型必

浅谈(安全)测试注意事项二

除了正常的功能测试外,我们考虑更多的是异常测试,那异常测试时应该如何进行? 1.截取和修改Post请求 一旦截取到请求后,对于请求头的内容可以随意的增加,删除及修改 2.绕开输入限制 截取请求,输入超级长的内容,如果接收到错误,比如  error 500 :internal server error ,务必检查服务器和应用以查明更深层的原因.这表明做的输入验证太少了. 即使有合适的输入验证,也可能忽略输入的长度,重复的提交这样长的输入,服务器的内存可能会被填满,而应用的响应速度会变得越来越慢,最

分享8年开发经验,浅谈java程序员职业规划

在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实现实并不是这样子的,在下从事.NET及JAVA方面的开发的也有8年的时间了,在这里在下想凭借自己的亲身经历,与大家一起探讨一下. 明确入行的目的 很多人干IT这一行都冲着"收入高"这一点的,因为只要学会一点HTML.DIV+CSS,要做一个页面开发人员并不是一件难事,而且做一个页面开发人员更容易找到工作,收入比普通的工作还要高一些,所以成为了很多高校毕业生的选择.如果您只是抱着这样一个心态来入行的话,那

浅谈cookie测试

Cookie 提供了一种在Web 应用程序中存储用户特定信息的方法,例如存储用户的上次 访问时间等信息.假如不进行cookie存储一个网站的用户行为,那么可能会造成以下问题:用户进行购买几件商品转到结算页面时,系统怎样知道用户之前订了哪几件商品.因为,cookie其中一个作用就是记录用户操作系统的日志,而系统对cookie不单单是存储,还有读取,也就是说系统和用户之前是一个交互的过程,这称为有状态. 但是Cookie 在带来这些编程的方便性的同时,也带来了安全上的问题.Cookie 的安全性问题