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

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

对我来说这似乎是无稽之谈,因为可能会发生一百万种情况(嗯,字面上......)

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

有帮助吗?

解决方案

您当然可以将问题限制在上限(最大吞吐量)限制。这没什么废话。事实上,不知道这些东西表明了一个非常随意的问题方法 - 特别是在电话世界。

您可以自己解决问题 - 最小的<!>“工作<!>”是什么?你必须完成交易或你的应用程序中的任何任务单元吗?

例如,有些消息来往于某些处理和数据库?获取有关各个部分的信息将使您了解最快的吞吐量。如果您加载系统并看到性能显着降低,那么您可以花时间找出使用低效算法等可能导致吞吐量下降的地方。

修改

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

我忽略了最糟糕的案例分析,正如你所指出的那样 - 是相当困难的。

其他提示

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

这东西并不容易,而且商业工具会花费你。《容量规划》一书附带一张 CD,其中包含大量 Excel 工作簿模板和模型示例,可以帮助您快速入门。

祝你好运 :)

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

<!>“我不知道我的头脑。我愿意为你估算一下,但这需要时间。显然,我的答案的准确性取决于我在计算估算时花了多少精力(I.E.时间)。我应该花多少时间计算我的估算?<!>

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

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

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

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

花一些时间思考它。分析重要的用例。想想你可能需要的记忆;考虑数据库访问;考虑网络访问(本地和远程)。这些将影响系统的性能。让整个团队一起完成这项工作。

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

结果:系统测试时出现令人讨厌的惊喜。随着发布日期的临近而减少恐慌。

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

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

  1. 考虑到性能要求和容量(即硬件),您可以计算出可以处理的工作量。

  2. 考虑到性能要求和工作负载,您可以计算所需的容量(即硬件)。

  3. 根据工作量和容量,您可以预测您的预期表现。

在某些领域也是如此,但除非您是该领域的专家,否则您根本不知道。例如,我编写代码来控制工业机器人。速度受机器人运动的限制,而不受代码执行速度的限制。知道机器人有多快以及它必须走多远,我们可以对<!>“speed <!>”进行相当好的估计。我不知道如何估计你申请的时间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top