当我们讨论性能测试时,我们在说什么?

说起性能测试,大家会想到哪些词?录制脚本、模拟高并发?性能需求分析、业务流程梳理?监控资源耗用、性能瓶颈定位?优化代码处理逻辑、提升服务器配置?

但这真的是性能测试的本质和最终目的么?这篇博客,聊聊我对软件性能的一些看法和思考。。。

首先明确一点:技术的存在是为了解决实际的业务发展中遇到的问题和痛点!

随着互联网时代不断深入生活工作的各方面,绝大多数的软件系统都会面临如下三个挑战:

1、日益增长的用户数量;

2、日渐复杂的业务场景;

3、急剧膨胀的数据冲击;

这对于软件系统而言,就意味着及时高效的处理能力、更好的服务可用性以及长期运行的稳定性等要求。

从以上几点要求出发,站在性能测试的角度,来谈谈我们需要注意哪些事项。。。

更及时高效的处理能力

在互联网最初的年代,有二五八原则一说。意思就是对用户而言,在页面做一个功能操作,如果能在2秒能出现用户期待的内容,那么用户体验就是比较好的。

如果5秒之内可以返回结果,那么对用户来说就是可以接受的范围,如果超过8秒,绝大多数用户就会选择离开或退出该页面。

虽然这只是一个笼统的概念,但也能看出用户对软件系统处理能力的容忍性。

近几年随着网络通讯技术的不断发展,以及硬件设施的不断提升,导致用户对软件处理能力越来越低的容忍力。

从性能优化角度出发,就需要我们尽力保持和降低系统的99%RT(即一段时间内请求响应时间从低到高排序,低于99%响应时间的上限边界值)的同时,提高单位时间内的处理能力

请求响应时间=请求发送耗时+请求解析耗时+请求处理耗时+处理结果返回耗时

提高处理能力和降低响应时间,有很多技术方案可以实现,比如:

提高网络传输速率、优化请求传输方式(串行→并行→连接复用→管道化)、增加缓存、优化代码处理方式、增加处理请求的机器数量、提升机器配置等方式。

更好的服务可用性

什么是可用性(Usability)?可用性实际上并不是一个具体的东西,也没有明确的定义。

个人觉得Jakob Nielsen大师提出的可用性五大属性,就很客观全面的介绍了可用性的特点,它们分别是:

可学习性(Learnability):初次接触这个设计时,用户完成基本任务的难易程度;

效率 (Efficiency):用户能多快完成任务;

可记忆性(Memorability):当用户一段时间没有使用产品后,是否能马上回到以前的熟练程度;

出错(Errors):用户能否从错误中恢复(从系统角度出发,可以理解为容错性);

满意度(Satisfaction):用户对产品的主观满意度。

如果真要给出一个定义,那么我们可以这样理解:可用性是指在特定的使用场景下,产品为特定用户用于特定目的时所具有的有效性、效率和主观满意度

从可用性五大属性出发,站在性能优化角度,就要求我们做如下的一些事情,来不断提升软件服务可用性:

可学习性:尽可能减少用户操作的步骤,优化业务逻辑;

效率:提升响应时间和系统的处理能力(回到上面提到的及时高效的处理能力);

可记忆性:人性化的提示,导航能力,是否符合特定用户的操作习惯;

出错:提升系统的容错能力和恢复能力;

满意度:提高用户体验,做好用户需求调研和场景建模分析;

如果只讨论技术保障方案,我们需要做好服务治理、服务解耦,通过主从模式、系统集群负载均衡、双机双工、分布式等方式,来保证系统在高可用的同时,降低故障恢复时间。

长期运行的稳定性

一般来说,系统的稳定性指标要求7*24小时或者5*8小时,系统的存活时间越长,意味着系统越稳定,这个要根据系统具体的业务定位来确定。

现在而言,系统的稳定性要求已经不仅仅是存活时间,还要求运行过程中的保持服务的高可用、及时处理能力、容错能力以及出现故障的及时恢复能力

那么如何保证系统的稳定性呢?

容错能力:即系统对于自身出现的错误具有一定的屏蔽或处理能力。常见的容错手段包括如下几点:

①、失败重试机制;

②、多机备份自动切换;

③、设置合理的TimeOut;

④、服务解耦,微服务模式;

⑤、权重选举,服务降级;

更多阅读:亿级web系统的高容错性实践

故障恢复能力:即系统能否从出错或故障中及时恢复正常服务水平的能力。

一般来说会根据故障的严重等级和优先级,确定不同等级的故障需要在多久时间内恢复正常提供服务的能力。常见的故障有如下几种:

①、硬件及有关设备故障;

②、软件系统故障;

③、数据故障;

④、网络故障;

为了应对如上的几种故障,常见的一些容灾恢复方案有如下几种:

①、系统需要具有自我诊断、故障报告及指示处理方法的能力,以及具备冗余及自动切换能力;

②、监控到故障发生时,系统需要具备及时隔离、服务降级、服务快速切换的能力;

③、主从热备,多机冷备,异地多活等措施;

更多阅读:不容忽视的软件可恢复测试

总结

回到开头提到的内容:技术的存在是为了解决实际的业务发展中遇到的问题和痛点!

随着业务的不断发展,软件系统面临着日益增长的用户数量、日渐复杂的业务场景以及急剧膨胀的数据冲击这几种挑战。

这就要求我们的系统具有及时高效的处理能力、更好的服务可用性以及长期运行的稳定性等要求。

为了解决这几点挑战,使系统具有所要求的能力,我们需要通过性能测试来验证系统是否具有我们所期望的能力

我们通过完善性能测试流程,优化性能测试工具,采用不同性能测试方法,在各种环境和条件下进行测试,全方位监控,定位分析性能瓶颈,针对性的进行优化

最终的目的是希望系统具有及时高效的处理能力,更好的服务可用性和长期运行的稳定性,来满足系统面临的种种挑战,为业务的发展提供更好的服务保障!

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

时间: 2024-10-28 23:58:34

当我们讨论性能测试时,我们在说什么?的相关文章

性能测试时需要关注哪些性能

对一个软件做性能测试时需要关注哪些性能呢? 我们想想在软件设计.部署.使用.维护中一共有哪些角色的参与,然后再考虑这些角色各自关注的性能点是什么,作为一个软件性能测试工程师,我们又该关注什么? 1.站在用户的角度分析一下,用户需要关注哪些性能. 对于用户来说,当点击一个按钮.链接或发出一条指令开始,到系统把结果已用户感知的形式展现出来为止,这个过程所消耗的时间是用户对这个软件性能的直观印象.也就是我们所说的响应时间,当响应时间较小时,用户体验是很好的,当然用户体验的响应时间包括个人主观因素和客观

Jmeter进行性能测试时多台负载机的配置方法

Jmeter 是Java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具提供更大的负载能力,jmeter短小精悍一有了使用多台机器同时产生负载的机制. 那么,是如何实现多台负载机同时运行的呢?当然不会多个人坐在多台负载机面前,一喊开始,大家同时启动jmeter.这种方式很笨,也很难达到真正的同步.其实,我们通过单个jmeter 客户端就可以控制多个远程的jmeter服务

在性能测试时使用nmon进行监控服务器性能

在使用Jmeter进行性能测试,可以使用nmon进行服务器的监控. 一.nmon说明 nmon分为工具包和分析包(nmonanalyser) nmon安装很简单,根据服务器版本,下载相应的版本后,进行安装即可. 二.nmon监听 1.实时监听 在nmon安装目录下,使用./nmon启动nmon工具. 在启动成功后,输入不同的命令,可以监控不同的信息 c---可显示CPU的信息: m---可显示内存的信息: n---可显示网络的信息: d---可显示磁盘信息: t---可查看系统的进程信息. 2.

性能测试时

一.默认配置AB压力测试 官方nginx/1.10.3 测试结果: Server Software: nginx/1.10.3 Server Hostname: 127.0.0.1 Server Port: 80 Document Path: / Document Length: 612 bytes Concurrency Level: 100 Time taken for tests: 4.226 seconds -- 表示所有这些请求被处理完成所花费的总时间 Complete request

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY'

mysql主键设置成auto_increment时,进行并发性能测试出现主键重复Duplicate entry 'xxx' for key 'PRIMARY' 解决方法: 在my.cnf的[mysqld]片段中添加设置innodb_autoinc_lock_mode=0 同时注意调大jdbc的活跃链接数,如设置 jdbc.maxActive=300,因为设置innodb_autoinc_lock_mode=0可能导致链接过多. 注意,这种方式只需要在并发性能测试时设置,因为这种方式在插入记录时需

性能测试你了解多少?

开头总是千篇一律,毕业于一个不起眼的学校,在学校的几年是彻底的浪费了,因为一入门接触的就是软件测试各种理论知识所以后面学习的也就是这方面的东西了,毕业后和其他年轻人一样怀着梦进行北漂,因为北漂女朋友都没有了.刚开始工作时和大家一样都是向往着做性能测试.自动化测试不愿意做功能测试,总觉得那没钱途,就各种学习性能测试,刚开始总想着学好了loadrunner就可以做性能测试了,在一个专业的性能测试员看来这是多么可笑的问题,这也是多么天真的想法呀!虽然现在的我对性能测试也只是只懂皮毛.但还是希望通过这篇

转:jmeter性能测试---登录百度进行搜索

在做web程序性能测试时,loadrunner和jmeter是两款常用的工具,两者比较起来,jmeter非常轻巧,且开源免费,上手快.这里简单介绍下jmeter的使用,以登录百度进行搜索为例. jmeter运行需要jdk环境,这个不多做介绍.软件界面: 右击“测试计划”,添加一个线程组 线程组界面可以配置线程的数量,“Ramp-Up Period(in seconds):"这个参数是 配置这些线程组在多少时间内完全启动(可以把时间设置长点,这样防止一开始就对服务器造成很大压力),还可以配置循环次

【转载】性能测试浅谈

本文主要针对WEB系统的性能测试.不涉及具体的执行操作,只是本人对性能测试的一点理解和认识. 性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能相关的缺陷(如内存溢出.并发处理等问题),我认为只是一种附加结果.从更高的层次来说,性能测试最想发现的,是瓶颈.如何能得到所需要的信息,就需要从多方面进行测试. 性能测试的内容 性能测试种类的划分与定义这里就不说了,各有各的说法,比如性能测试.负载测试.压力测试这三个词,在网上能找到N个版本的定义,

如何对系统进行性能测试

性能测试种类的划分与定义这里就不说了,各有各的说法,比如性能测试.负载测试.压力测试这三个词,在网上能找到N个版本的定义,大体理解就行了,没必要在文字层面上较这个真.以下的内容也只是我个人的理解,一些名词的定义可能和其他资料有所不同,但在我的工作中,这样是比较形象和容易理解的. 性能测试的目的,简单说其实就是为了获取待测系统的响应时间.吞吐量.稳定性.容量等信息.而发现一些具体的性能相关的缺陷(如内存溢出.并发处理等问题),我认为只是一种附加结果.从更高的层次来说,性能测试最想发现的,是瓶颈.