如何衡量软件的可扩展性?


21

我被要求就特定的应用程序可伸缩性做一些小型的技术介绍。该应用程序是使用Java,Spring MVC,Hibernate开发的。我可以访问应用程序源代码。

如何测量软件可伸缩性(使用源)以及在测量软件可伸缩性时需要注意哪些指标?

Answers:


8

我将从阅读有关该主题的维基百科文章开始。

简而言之,可伸缩性是系统性能随添加更多资源而增长的方式,或者是资源利用率随负载增加而增长的方式。例如,在响应时间超过0.3秒之前,您的网站可以处理多少个并发用户?将可用的RAM /磁盘/ CPU /等加倍后,出现相同的问题。您可能可以利用对应用程序内部的了解来决定哪些参数值得检查。

用一台服务器计算机和一个或多个客户端计算机设置一个测试台。使用某种工具来限制服务器可用的资源量(例如ulimit),或在服务器上运行某些干扰应用程序。衡量服务器如何处理客户端请求。重复上述逐渐增加/减少的干扰负载/可用资源。最后,您将获得n维空间,其中包含点。一次只更改一个参数,而将所有其他参数固定为某个典型值(或几个值)可能会更简单。在这种情况下,您可以将结果表示为一堆2D图形,其中一个轴具有服务器性能(例如,用户/请求数),而另一个轴则具有资源利用率/可用性。

在更复杂的场景中,您的应用程序为应用程序的多个部分使用多个服务器,并且可以改变它们的数量和比率,但是我想这不是您的情况。如果这很重要,您最多可能想要更改线程/进程的数量。

如果测量整个应用程序,通常不需要访问源代码。但是,您可能会对测量代码的某些特定部分(例如,仅DB或UI)感兴趣。然后,您可以使用源代码仅公开此模块进行测量并运行测试。这称为微基准测试

如果您在寻找示例,学术文章中有很多示例。在Google学术搜索中搜索性能评估 +您的首选字词。


1

对于实际应用程序,可伸缩性并不是真正可量化的属性。

实际上,可伸缩性是指能够支持在各个方面不断增加的工作负载。

从该应用程序开始,将利用现有的硬件资源来支持不断增加的工作负载。但是在很多地方您都达到了极限。例如,内存量,核心数,数据结构争用,数据库吞吐量等等。每次达到这些限制之一时,就必须采用不同的方法来支持不断增加的工作负载。可伸缩性是指在达到不可克服的限制之前,您可以持续增加工作量的时间,或者需要进行重大的重新设计。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.