5

前几天有人问我这是一个棘手的问题……我们正在开发一个非常复杂的电话 (SIP) 应用程序,其中包含混合的 C++ 和 PHP 代码以及 MySQL 数据库和几个开源组件。

一位电信工程师要求我们估计应用程序的性能(尚未准备好)。他说‘好吧,你知道每秒有多少数据包可以通过 Linux 内核,而且你可能知道你的应用程序有多快,所以告诉我每秒有多少调用会通过你的东西’。

对我来说似乎是胡说八道,因为可能会发生一百万种情况(嗯,从字面上看......)

但是......有没有办法在实际测试之前估计应用程序性能(知道它将运行的硬件,能够在其上运行标准基准测试等)?

4

7 回答 7

6

您当然可以用上限(最大吞吐量)限制问题。没有什么废话。事实上,不知道这些东西表明解决问题的方法相当随意——尤其是在电话领域。

您可以自己解决问题 - 您必须为交易或应用程序中的任何任务单元完成的最少“工作”是多少?

例如,一些往返的消息、一些处理和数据库命中?获取有关各个部分的信息将使您了解可能的最快吞吐量。如果您加载系统并发现性能显着降低,那么您可以花时间找出可能因算法效率低下而损失吞吐量的地方,等等。

编辑

要进行此练习,您需要了解您的应用程序为每个用例执行的所有步骤。然后,您可以确定每个用例的最大吞吐量。在发布和上线之前,您绝对应该知道这些东西。

我忽略了最坏情况的分析——正如你所指出的——要困难得多。

于 2008-11-14T15:58:04.057 回答
3

请参阅Web 性能的容量规划:度量、模型和方法。还有一些工具可以进行这种离散事件模拟:

这东西不容易,商业工具会花你的钱。容量规划书随附一张 CD,其中包含许多 Excel 工作簿模板和模型示例,可以让您快速入门。

祝你好运 :)

于 2008-11-14T17:28:28.583 回答
2

如果你真的要回答这个问题,你可以这样说:

“我不知道。我会为你估算这个,但这需要时间。显然我的答案的准确性取决于我在计算我的估算时付出了多少努力(IE时间)。如何我应该花多少时间来计算我的估计?”

把负担重新推给他们。如果他们真的想要一个准确的答案,他们将不得不让您至少构建一些可以模拟实际环境的测试应用程序。

于 2008-11-14T16:13:24.943 回答
1

您可以使用峰值来衡量性能。您的整个系统可能还没有工作,但您知道这些部件是如何组合在一起的。您可以在几个小时内完成与最终应用程序相同类型的工作,跨越所有层,并使用它来衡量您的设计性能。

请记住:原型很广,尖峰很深。

于 2008-11-14T16:21:54.380 回答
1

您绝对可以提前进行容量规划,但估算的质量将取决于可用数据的质量。

最好的估计是在测试中构建系统,运行模拟工作负载,然后根据性能要求和工作负载预测容量。这 3 个形成一个预测空间 - 给定 3 个中的 2 个,您可以预测第三个:

  1. 给定性能要求和容量(即硬件),您可以计算出您可以处理的工作负载。

  2. 给定性能要求和工作负载,您可以计算出您需要的容量(即硬件)。

  3. 给定工作负载和容量,您可以预测您的预期性能。

于 2009-09-27T07:39:24.193 回答
1

你应该做估算。估计不会给你正确的答案。然而,它会让你思考这个问题。现在这听起来像是你的编码,并希望一切都会好起来。或者您处于恐慌模式,觉得您没有时间进行估算。

花一些时间考虑一下。分析重要的用例。想想你可能需要的内存;考虑数据库访问;考虑网络访问(本地和远程)。这些将影响系统的性能。让整个团队一起做这件事。

在这些重要用例的开发过程中,定期测量系统的性能。如果需要,可以模拟组件/其他系统。分析结果。这些与您的估计相比如何。也许组件是内存/数据库/网络绑定的。也许您需要更多内存;更少的数据库访问;更简单的查询;缓存。您不必立即进行这些更改。但是,您确实知道您的系统是如何运行的以及您需要做什么。

结果:系统测试中的令人讨厌的意外更少。随着发布日期的临近,人们不再恐慌。

于 2009-10-07T11:23:03.580 回答
0

在某些领域确实如此,但除非您是该领域的专家,否则您将一无所知。例如,我编写代码来控制工业机器人。速度受机器人运动的限制,而不是代码的执行速度。知道机器人有多快和它要走多远,我们就可以对“速度”做出相当好的估计。我不知道如何估计您的申请时间。

于 2008-11-14T16:40:50.413 回答