• 0
  • 0
分享

  随着软件系统的规模越来越庞大,对性能的需求越来越高,性能测试的要求也越来越高。但是仅仅做性能测试,已经很难满足当前软件系统对于性能的各种需求,所以需要做更多性能相关的工作。而对于这一系列性能相关的工作,我们称之为性能工程。

  性能工程是发现和解决软件系统性能问题最主要的方法体系和技术手段,它一般包含以下几个部分:性能测试,性能轮廓,性能分析,性能优化和性能规划(容量规划)。

  性能测试:通过不同类型的测试,获取系统在不同情况下的性能情况,包括各种外部性能指标,是否满足实际的性能需求等。

  性能轮廓:通过特定的工具获取被测系统的各种内部性能指标,从而辅助性能分析工作。

  性能分析:通过分析性能测试和性能轮廓获得的各种数据等,发现性能瓶颈以及其原因,从而辅助性能优化的工作。

  性能优化:通过各种技术和业务手段,尽可能消除性能瓶颈,从而提升系统的性能。

  性能规划:通过在不同配置下,进行不同规模的性能测试,获取系统的性能变化规律。并针对不同的性能需求,利用这个规律对服务器资源和容量进行规划,从而满足不同的性能需求。

  在性能工程中,技术层面上最难的部分是性能分析和性能优化,而整体上最为繁琐和复杂的则是性能规划,因为其包括了性能测试,基础设施,性能建模和资源协调等相关的工作,甚至需要做系统架构调整才能满足相应的规划工作。

  性能规划

  对于用户量不大的中小型系统,因为单机或者少量的多机就可以满足所有的业务性能需求,所以一般不需要做性能规划。但是随着业务性能需求的增大,产品环境的资源需求随之增加。但是为了避免增加过多资源,尽可能地减少资源的浪费,所以需要找到满足业务性能需求的最小资源量。

  通过性能规划,可以找到这个最小的资源量。其次,有些项目的产品环境和测试环境的资源是不一样的,甚至有巨大的区别。使用性能规划的一系列实践,可以通过测试环境的性能指标,推测或者计算出产品环境中大概的性能情况。从而判断当前的产品环境是不是满足业务性能需求。

  传统

  现代弹性云平台出现之前,如果要部署一个服务器系统,必须购买固定配置和数量的物理机,应用服务器多机扩展也相对很困难,成本也很高。传统的数据库系统则更难以进行扩展,虽然以NewSQL为代表TiDB等数据库已经支持了水平横向扩展的能力,但是和应用服务器一样,硬件水平横向扩张也相对很困难,成本也很高。所以在传统的基础设施上做性能规划的痛点比较多,难度也比较大。

  现代

  现代弹性云平台出现之后,在其上的服务实例的硬件配置和数量可以非常容易地变更,数据库的硬件能力也可以进行变更。所以在这种基础设施下,可以更为容易地进行性能规划的工作。

  实践

  在进行性能规划之前,一定要熟悉整个系统的架构,并针对三个关键点进行隔离分析:网关,应用服务器和数据库。

  以现在的技术,很难对已有的网关系统本身进行水平横向扩展,只能对其进行单机扩展,包括升级CPU,内存等。对于应用服务器,单机配置最好要和产品环境的实例保持一致,只是改变服务器数量来进行性能规划测试。对于无法进行水平横向扩展的应用系统来说,一般不需要做性能规划。最后对于数据库,如果无法水平扩展的数据库系统,可以使用云平台自带的数据库系统,因为现在大部分云数据库系统都支持扩展数据库的单机能力,比如Amazon RDS和 Azure SQL Database等。如果使用的是分布式数据库,则可以像应用服务系统一样在云平台上进行水平横向扩展。

  只有根据业务性能需求,对关键三点都尽可能分别做性能规划,才能做到真正的全方位的性能规划。

  步骤:

  做性能规划,一般有以下6个基本步骤:

  ·准备测试环境

  · 选取测试指标

  · 建立测试模型

  · 变化测试指标并进行性能测试

  · 分析测试报告、拟合测试数据

  · 找到性能变化规律,并规划产品环境性能

  首先准备测试环境,最好选用云平台作为测试环境,如果无法使用云平台则需要准备足够量的物理机,以便得到足够的拟合数据。选取性能指标和建立测试模型是最关键和重要的两步,它们的正确和有效性直接影响到性能规划的工作量和结果的有效性。对于业务需求和系统架构的不同,重点关注的指标也有所不同,比如数据密集型的系统,一般会选取Response Time和TPS等作为关键指标;而数据存储型的系统,则选择吞吐量和IO作为关键指标。对于测试模型则可以考虑基于独立功能或者是基于场景,是需要有Think Time还是不需要,下图就是一个简单的测试模型的示例:

1-1.jpg

  变化测试指标并进行性能测试则是最繁琐的步骤,因为需要改变各种配置和指标来进行测试,并收集各种测试结果数据。最后两步则是通过分析和数学拟合,并根据业务性能需求产出性能规划结果。

  最后为了验证性能规划的有效性,需要在产品环境中通过各种监控手段,比如应用系统埋点采集或者日志采集,服务器探针等获取应用系统和服务器的各种性能数据,从而验证性能规划的有效性。

  拟合

  在性能规划的步骤里面有一步是拟合测试数据,它是通过数学的拟合方法,通过测试数据打点之后,得到一个曲线和与之相应的数学函数,然后通过这个数学函数可以估计性能的变化规律,从而对于硬件资源和系统配置进行规划的工作。

  下表是一个以实例数量作为变化指标,在特定时间内完成的请求数作为观察指标的测试结果数据:

1-2.jpg

  然后通过这些数据生成散列图(以下演示图使用的是MS Excel生成的,可以使用任何其他的数学工具或者库来生成以下的演示图,比如SageMath,Mathematica等)

1-3.jpg

  拟合有很多种方式,比如指数拟合,线性拟合和多项式拟合等。一般情况下,多项式拟合可以获得比较准确的结果,下面三张图是通过Excel生成的多项式拟合(包括方程)。其中R=1则表示多项式完全符合所有的坐标点,且斜率为正。但是测试结果数据本身就存在一些不确定性,所以一般会找尽可能R接近1并且曲线尽可能平滑的拟合结果来进行推算。比如下图中我就会选择第一张图中的拟合函数来进行推算。

  拟合图1:

1-4.jpg

  拟合图2:

1-5.jpg

  拟合图3:

1-6.jpg

  一般情况下,做性能规划测试时,还可以选取下图中的指标来进行测试,并得到相应的数据来做二维拟合:

1-7.jpg

  除了二维拟合,还可以做三维拟合,下图是常规情况下做三维拟合需要关注和变化的指标:

1-8.jpg

  总结

  性能规划在大型应用服务系统中的地位越来越高,因为它可以发现系统在常规性能测试的情况下很难发现的一些性能瓶颈问题,找到性能规律,从而根据不同的业务性能需求来规划产品环境的资源和配置,从而可以有效地防止服务器过载或者节约产品环境的资源和成本,一举多得。


作者:刘冉    

来源:http://www.51testing.com/html/62/n-4481262.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   Locust介绍  Locust是一款使用Python开发的开源性能测试工具,支持分布式,可在多台主机上对系统持续发送请求,与Jmeter、LoadRunner的等压测工具使用线程的方式模拟用户请求不同,Locust是使用协程的方式模拟用户请求,协程的上下文切换是由自己控制,当一个协程执行完成后会主动让出,让另一个协程开始执行,切换是在用户态完成的,而线程切换是受系统控制,是在用户态与内核态之间切换,所以协程上下文切换的代价远比线程切换的代价小的多,因此Locust可以达到更高数量级的并发。  Locust安装  需要先安装python3.6以上版本,然后再安装Locust。  pip&n...
            0 0 1550
            分享
          •   单元测试是一个伟大的发明,同时也是一个操蛋的发明。只要团队碰它,几乎很难全身而退。  如果是我们自己写的代码,那么,写写单元测试也无伤大雅。但我们绝大多数人,都是跟在别人后面打扫狗屎,或者是留给别人一堆狗屎。这时候,单元测试写起来,就有一种不情不愿的味道。  没错,就是不想写!  为了应付所谓的指标,我们要给那些遗留代码,将要发臭的代码上一剂良药:那就是自动化。假如这些糟心的代码,大部分交给机器去写,我想很多人是非常乐意的。  squaretest  有很多这样的工具,比如IDEA自带的。但是它只能生成一些表面功夫的东西,也就是生成一个骨架而已。  说实话,并没有什么鸟用。根本就没减少我多...
            0 0 1010
            分享
          •   据报道,几天前,马斯克将Twitter蓝色小鸟Logo换成柴犬,而柴犬与马斯克力捧的狗狗币(Dogecoin)有着密切联系,因此狗狗币价格大涨。然而现在Twitter又将标志换回蓝色小鸟,投资者抛售狗狗币,导致狗狗币价格大跌9%。  2013年马斯克以近乎玩笑的方式“创造”加密货币狗狗币,而且允许消费者用狗狗币购买特斯拉汽车。美国时间周一马斯克将蓝色小鸟标志换成柴犬,当时狗狗币的价格为10.5美分,现在已经跌至8.4美分。  自周一Twitter更换标志后,狗狗币价格一度上涨约30%,但相比2021年高点仍然低很多。许多狗狗币持有者因为换标受益,他们纷纷在Discord社区向马斯克表达谢意...
            0 0 993
            分享
          •  时间都去哪里了敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式。前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,Android等多个客户端使用,效率大大提高。但生于敏捷,死于迭代,困于团队协作常常是这种软件研发模式的一大弊病。 随着项目不断推进、变更,项目越来越大,维护成本也越来越高。由于某些公司接口文档管理方式采用wiki及html,openapi形式,版本迭代较快,接口常常变更,成员间update和文档维护却常常跟不上。在API管理方面越到后期越存在着可观且隐形的“人力资源”浪费:文档老旧不可用,新人上...
            13 13 1602
            分享
          •   我们在工作了一段时间之后,势必会感觉到自己已经积累了一些工作经验了,会开始考虑下一阶段的职业生涯会如何发展。测试人员在职业生涯中的不确定因素还是不少的,由于其入门门槛不高,不用学习太多技术性知识即可入行,所以一开始决定踏入测试圈的小伙伴他们当时决定干这一行当的理由也有可能五花八门,例如:觉得入门简单,先以测试人员的身份进入IT行业、可能本身就喜欢质量保障方面的工作、不希望像开发人员一样太累掉头发、就是喜欢找开发的茬等等~  哈哈开个小玩笑,那既然入门理由有很多,那之后的职业生涯发展也自然而然会出现各种各样的分化,下面我就来列举一下测试人员未来的几个主要的职业方向,看看你是想做技术大牛,还是...
            0 0 1024
            分享
      • 51testing软件测试圈微信