• ACCP软件工程师
  • BENET网络工程师
  • JAVA+大数据
  • Python工程师
  • 云计算工程师
  • Web前端工程师
  • 软件测试工程师

如何获取“有效的”性能需求

2013年07月16日 15:06供稿中心:兆隆教育

摘要: 理解性能 如何评价性能的优劣:用户视角vs系统视角 对于最终用户(End-User)来说,评价系统的性能好坏只有一个字快。最终用户并不需要关心系统当前的状态即使系统这时正在处理着成千上万的请求,对于用户来说,由他所发出的这个请求是他唯一需要关心的,系统对

理解性能

  如何评价性能的优劣:用户视角vs系统视角

  对于最终用户(End-User)来说,评价系统的性能好坏只有一个字——“快”。最终用户并不需要关心系统当前的状态——即使系统这时正在处理着成千上万的请求,对于用户来说,由他所发出的这个请求是他唯一需要关心的,系统对用户请求的响应速度决定了用户对系统性能的评价。

  而对于系统的运营商和开发商来说,期望的是能够让尽可能多的用户在任意时刻都拥有最好的体验,这就要确保系统能够在同一时间内处理更多的用户请求。系统的负载(并发用户数)与吞吐量(每秒事务数)、响应时间以及资源利用率(包括软硬件资源)之间存在着一个“此消彼长”的关系。因此,从系统的运营商和开发商的角度来看,所谓的“性能”是一个整体的概念,是系统的负载与吞吐量、可接受的响应时间以及资源利用率之间的平衡。

  换句话说,“好的性能”意味着更大的并发用户数(The Optimum Number of Concurrent Users)和较大并发用户数(The Maximum Number of Concurrent Users)。

  另外,从系统的视角来看,所需要关注的还包括三个与“性能”有关的属性:可靠性(Reliability),可伸缩性(Scalability)和 可恢复性(Recoverability。

  响应时间

  一个请求的响应时间是由几部分时间组成的,包括:

  C1:用户请求发出前在客户端需要完成的预处理所需要的时间;

  C2:客户端收到服务器返回的响应后,对数据进行处理并呈现所需要的时间;

  A1:Web/App Server对请求进行处理所需要的时间;

  A2:DB Server对请求进行处理所需的时间;

  A3:Web/App Server对DB Server返回的结果进行处理所需的时间;

  N1:请求由客户端发出并达到Web/App Server所需要的时间;

  N2:如果需要进行数据库相关的操作,由Web/App Server将请求发送至DB Server所需要的时间;

  N3:DB Server完成处理并将结果返回Web/App Server所需的时间;

  N4:Web/App Server完成处理并将结果返回给客户端所需的时间;

  从用户的角度来看,响应时间=(C1+C2)+(A1+A2+A3)+(N1+N2+N3+N4);但是从系统的角度来看,响应时间只包括(A1+A2+A3)+(N1+N2+N3+N4)。

  在理解了响应时间的组成之后,可以帮助我们通过对响应时间的分析来更好的识别和定位系统的性能瓶颈。

  吞吐量vs.吞吐量

  在不同的测试工具中,对于吞吐量(Throughput)会有不同的解释。例如,在LoadRunner中,这个指标是以字节数为单位来衡量网络吞吐量的,而在JMeter中则是以事务数/秒为单位来衡量系统的响应能力的。不过在大多数英文的性能测试方面的书籍或资料中,吞吐量的定义使用的是后者。

  并发用户数≠每秒请求数

  这是两个容易让初学者混淆的概念。

  简单说,当你在性能测试工具或者脚本中设置了100并发用户数后,并不能期望着一定会有每秒100个请求发给服务器。事实上,对于一个虚拟用户来说,每秒发出多少请求只跟服务器返回响应的速度有关。如果虚拟用户在0.5秒内就收到了响应,那么它会立即发出第二个请求;而如果要一直等待3秒才能得到响应,它将会一直等到收到响应后才发出第二个请求。也就是说,并发用户数的设置只是保证服务器在任一时刻都有100个请求需要处理,而并不一定是保证每秒中发送100个请求给服务器。

  所以,只有当响应时间恰好是1秒时,并发用户数才会等于每秒请求数;否则,每秒请求数可能大于并发用户数或小于并发用户数。

  与性能测试相关的其他测试

  可靠性测试(Reliability Testing)    对于一个运营商级的系统来说,能够保证提供7×24的连续稳定的服务是非常重要的。当然,你可以通过一些“高可用性(High Availability)”技术方案来增强系统的可靠性,但是对于系统本身的可靠性测试是不能被忽略的。

  常用的测试方法是使用一定的负载长时间向服务器加压,并观察随着加压时间的延长,响应时间、吞吐量以及资源利用率的变化。要注意的是,所使用的负载应当是系统的并并发用户数,而不是较大并发用户数。

  可伸缩性测试(Scalability Testing) 对于一个系统来说,在一个给定的环境下,它的并发用户数和较大并发用户数是客观存在的,但是系统所面临的压力却有可能随上线时间的延长而增大。例如,一个在线购物站点,注册用户数量不断增多,访问站点查询商品信息和购买商品的人也不断的增多,我们应该用一种什么样的方案,在不影响系统继续为用户提供服务的前提下来实现系统的扩容?

  一种常用的方案是使用负载均衡(Load Balance)和集群(Cluster)技术。但是在我们为客户提供这种方案之前,需要先自己进行测试,保证该技术的有效性——我们是否真的可以通过简单的增加服务器数据和修改某些参数配置,就能够使得系统的容量得到线性的增长?

  可恢复性测试(Recoverability Testing) 虽然我们已经可以准确的估算出系统上线后将要面对的压力,并且可以保证系统的并发用户数和较大并发用户数是足以应对这些压力的,但是这个世界上总是有些事情上我们所无法预料到的——例如9.11事件发生后,AOL的网站访问量在短时间内增长到了平时的数十倍。

  我们无法保证系统可以在任何情况下都能为用户正确无误的提供服务,但是我们需要确保当意外过去后,系统可以恢复到正常的状态,并继续后来的用户提供服务——就像从未发生过任何事情一样。

  如果要实现“可恢复性测试”,我们可以借助于测试工具或脚本来逐渐的增大并发用户数,直至并发用户数已经超过了系统所能承受的较大并发用户数,并导致软硬件资源利用率饱和,响应时间无限延长,大量的请求因为超过响应时间要求或无法获得响应而失败;之后,我们逐渐的减少并发用户数,并观察资源利用率、响应时间、吞吐量以及交易成功率的变化是否与预期目标一致。

  当然,这一切的前提是在系统负载达到峰值前,Server一直在顽强的挣扎着而没有down掉。

 

©陕ICP备18020405号-2 Copyright  ©  2001-2018隶属于西安兆隆计算机培训中心版权所有