0

客户在相当大的负载下运行集群 Web 应用程序服务器。他想知道即将推出的尚未实施的应用程序是否仍可通过他当前的设置进行管理。是否有一种既定的方法可以基于现有的需求规范(或者可能是功能设计规范)来预测概念状态下应用程序的性能影响。首要任务是预测对 CPU 资源的影响。

有可能得到相当准确的结果吗?

4

1 回答 1

3

我会说规范的答案是否定的。您始终必须对部署在其目标架构上的实际应用程序进行基准测试。

为什么?软件和软件开发是不可预测的。而且系统更加不可预测。

即使您现在知道需求并进行了深入分析,如果出现以下情况会发生什么:

  • 该程序有一个性能错误(或两个......) - 这甚至可能是第三方库中的错误
  • 添加新要求或更改要求
  • 分析和设计没有发现组件之间所有隐藏的相互关系
  • 添加负载会产生非线性影响,并且新负载可能会使硬件超过临界阈值(这个阈值现在并不明显)。

这些担忧不是理论上的。如果是这样,软件开发将是微不足道的,项目将始终按时交付并符合预算。

但是,您可以应用一些我个人使用的启发式方法。首先,您需要对当前系统有一个非常好的了解:

  • 将现有系统的功能分解为小型、中型和大型,并在您的硬件上进行基准测试
  • 对这些单独的函数执行负载测试,并尽可能多地捕获事务/秒、CPU 成本、网络流量和磁盘 I/O 数据的吞吐量,确保您有小型、中型和大型的表示。此负载测试应使系统达到额外负载将减少事务/秒的程度
  • 获取当前系统的最大事务数/秒的数据
  • 了解此应用程序的增长率并做出相应的计划

执行分析以获得 CPU、RAM、磁盘和网络方面的“平均”小型、中型和大型“成本”。这将是以下形式:

  • 小额交易
    • CPU利用率:10ms
    • RAM 开销 5MB(缓存)
    • RAM 工作:100kb(例如 10 个并发线程 = 1MB,100 个线程 = 10MB)
    • 磁盘 I/O:5kb(数据库)
    • 网络应用<->数据库:10kb
    • 网络应用<->浏览器:40kb

从这个分析中,您应该了解您有多少余量——当然是 CPU,但请检查是否有足够的 RAM、网络和磁盘容量。例如,小事务所需的 CPU 是每秒小事务的数量乘以小事务的 CPU 成本。加上中型交易和大型交易的 CPU 成本,您就有了 CPU 预算。

确保 DBA 参与其中。他们需要在数据库上做同样的事情。

现在您需要分析即将到来的应用程序:

  • 将每个特征分配到相同的小、中、大桶中,尽可能确保同类匹配
  • 询问有关每个功能在高峰期将经历多少事务/秒的深入探究性问题
  • 谈谈应用程序的预期增长率
  • 不要忘记系统可能会随着数据库大小的增加而变慢

就个人而言,您被要求预测不可预测的事情 - 将您的名字和声誉置于危险之中。如果您说它适合,那么您将承担大型软件开发项目的风险。如果您被迫说是,您需要确保与您的姓名一起涉及许多其他人的姓名 - 并且这些姓名都应该在“去/不去”决定中可见。这不仅更有可能确保考虑到所有因素,并且分析是合理的,而且还将确保该项目有许多参与其中的个人与其成功保持一致。

于 2013-02-27T08:35:53.400 回答