专栏首页工程师的自我修养之路当我们讨论性能测试时,我们在说什么?

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

说起性能测试,大家会想到哪些词?录制脚本、模拟高并发?性能需求分析、业务流程梳理?监控资源耗用、性能瓶颈定位?优化代码处理逻辑、提升服务器配置?但这真的是性能测试的本质和最终目的么?这篇文章,聊聊我对软件性能的一些看法和思考。。。

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

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

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

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

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

这对于软件系统而言,就意味着及时高效的处理能力、更好的服务可用性以及长期运行的稳定性等要求。从以上几点要求出发,站在性能测试的角度,来谈谈我们需要注意哪些事项。。。

更及时高效的处理能力

在互联网最初的年代,有二五八原则一说。意思就是对用户而言,在页面做一个功能操作,如果能在2秒能出现用户期待的内容,那么用户体验就是比较好的。如果5秒之内可以返回结果,那么对用户来说就是可以接受的范围,如果超过8秒,绝大多数用户就会选择离开或退出该页面。

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

近几年随着网络通讯技术的不断发展,以及硬件设施的不断提升,导致用户对软件处理能力越来越低的容忍力。从性能优化角度出发,就需要我们尽力保持和降低系统的99%RT(即一段时间内请求响应时间从低到高排序,低于99%响应时间的上限边界值)的同时,提高单位时间内的处理能力

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

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

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

更好的服务可用性

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

长期运行的稳定性

一般来说,系统的稳定性指标要求7*24小时或者5*8小时,系统的存活时间越长,意味着系统越稳定,这个要根据系统具体的业务定位来确定。现在而言,系统的稳定性要求已经不仅仅是存活时间,还要求运行过程中的保持服务的高可用、及时处理能力、容错能力以及出现故障的及时恢复能力。那么如何保证系统的稳定性呢?

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

①、失败重试机制;

②、多机备份自动切换;

③、设置合理的TimeOut;

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

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

更多阅读:

https://blog.csdn.net/tanga842428/article/details/79664605

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

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

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

②、软件系统故障;

③、数据故障;

④、网络故障;

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

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

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

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

总结

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

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

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

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

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

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

本文分享自微信公众号 - 工程师的自我修养之路(Engineer_Way),作者:老张

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-02-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Locust:简介和基本用法

    我个人在性能测试工作中,负载生成工具使用的大多都是jmeter,之前学习python时顺带了解过python开源的性能测试框架locust。这篇文章,简单介绍下...

    写博客的老张
  • 混沌工程-初识

    公司新成立了一个稳定性团队,20年的重要目标之一就是开展混沌工程。为了后续更好的开展工作,记录关于“混沌工程”相关的知识以及工程实践。

    写博客的老张
  • 性能测试工程师,面试都问什么?

    大概去年这个时候,写过一篇文章:性能测试岗位常见面试题。当时是出于一个求职者的角度,对自己遇到的一些性能岗位面试问题进行了整理归纳。最近这一年,对性能测试有了更...

    写博客的老张
  • 为什么很多SaaS企业级产品都熬不过第一年?

    2015年2B企业级应用软件的资本市场异常火热。包括纷享销客、销售易、今目标等一众企业级软件厂商受到各大VC的资本热捧,阿里重金打造的钉钉,也以后发制人之势席卷...

    静一
  • 全面解析ArrayList,超详细!

    ArrayList就是动态数组,是List接口的可调整大小的数组实现;除了实现List接口之外,该类还提供了一些方法来操纵内部使用的存储列表的数组大小。它的主要...

    用户7544680
  • 2.4.2、Google Analytics高级应用——行为流报告

    GA 里面有一个用户流报告,还有一个行为流报告,如果不去细看,第一感觉会是这两个报告不是一样的吗,长得那么像。下面就要介绍一下用户流报告和行为流报告的异同点:

    GA小站
  • 【目标检测系列】个人整理目标检测框架yolo v1深入剖析

    faster-RCNN在目标检测精度上已经能够达到一个很高的水准,但是作为RCNN系列的最巅峰,它提出了RPN网络产生推荐性区域,但是它依旧有着一些缺点,这些区...

    小草AI
  • 论文算法复现-推荐算法 | 考虑信任传播的概率矩阵分解

    通常,在推荐系统中,我们有一组用户和一组项目。每个用户通过一些值对一组项目进行评分。推荐系统的任务是预测用户u在未评级项目i上的评级,或者通常根据已经存在的评级...

    用户1621951
  • 斗哥牌OTCMS3.20漏洞组合,照亮你的心

    0x00 背景 本周拿到OTCMS的源码便对该源码进行审计,发现这个源码使用了预编译暂时没有找到SQL注入相关的问题,且对用户输入的内容控制比较严格,对大部分的...

    漏斗社区
  • 微软沈向洋等人长文:从Eliza到小冰,社交对话机器人的机遇和挑战

    机器之心

扫码关注云+社区

领取腾讯云代金券