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

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

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

 

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

随着互联网时代不断深刻生活工做的各方面,绝大多数的软件系统都会面临以下三个挑战:服务器

一、日益增加的用户数量;网络

二、日渐复杂的业务场景;并发

三、急剧膨胀的数据冲击;负载均衡

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

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

 

更及时高效的处理能力高并发

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

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

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

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

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

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

提升处理能力和下降响应时间,有不少技术方案能够实现,好比:

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

 

更好的服务可用性

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

我的以为Jakob Nielsen大师提出的可用性五大属性,就很客观全面的介绍了可用性的特色,它们分别是:

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

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

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

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

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

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

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

可学习性:尽量减小用户操做的步骤,优化业务逻辑;

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

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

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

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

若是只讨论技术保障方案,咱们须要作好服务治理、服务解耦,经过主从模式、系统集群负载均衡、双机双工、分布式等方式,来保证系统在高可用的同时,下降故障恢复时间。

 

长期运行的稳定性

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

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

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

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

①、失败重试机制;

②、多机备份自动切换;

③、设置合理的TimeOut;

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

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

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

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

通常来讲会根据故障的严重等级和优先级,肯定不一样等级的故障须要在多久时间内恢复正常提供服务的能力。常见的故障有以下几种:

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

②、软件系统故障;

③、数据故障;

④、网络故障;

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

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

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

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

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

 

总结

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

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

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

为了解决这几点挑战,使系统具备所要求的能力,咱们须要经过性能测试来验证系统是否具备咱们所指望的能力

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

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