Architecture 如何估计支持X数量用户/事务所需的硬件?

Architecture 如何估计支持X数量用户/事务所需的硬件?,architecture,Architecture,我很好奇,每个人如何处理以下性质的问题: “我们需要创建一个应用程序(如电子商务网站)。它将使用技术B(如java)。它必须支持C(如200)个并发用户。我们需要什么样的硬件?” 硬件规格包括所需的CPU数量,以及基本答案的内存量 为了简化我的示例,在我的问题中我将坚持使用Java技术,但我确实希望得到一个与技术无关的建议 我明白这问题涉及很多其他因素。例如,一个不同的框架(Wicket vs Struts vs Spring vs pure EJBJ2EE体系结构)、分布式层的数量(单框设置或

我很好奇,每个人如何处理以下性质的问题:

“我们需要创建一个应用程序(如电子商务网站)。它将使用技术B(如java)。它必须支持C(如200)个并发用户。我们需要什么样的硬件?”

硬件规格包括所需的CPU数量,以及基本答案的内存量

为了简化我的示例,在我的问题中我将坚持使用Java技术,但我确实希望得到一个与技术无关的建议

我明白这问题涉及很多其他因素。例如,一个不同的框架(Wicket vs Struts vs Spring vs pure EJBJ2EE体系结构)、分布式层的数量(单框设置或三层设置)

但是,考虑到一个人之前可能没有使用给定技术的经验(或者可能没有机会进行负载测试以了解所需的硬件),并且在最初的项目讨论中总是会出现这样的问题(并且答案是前进的基础),您如何着手给出答案

我曾想过通过估计每个用户会话可能占用的内存量来解决内存需求问题,但肯定会有框架/虚拟机开销

但总的来说,我似乎无法为这个问题找到一个好的解决方案,这个问题似乎总是会突然出现。负载测试肯定会有助于解决这个问题,但到那时项目已经准备好了,这是一个客户在提交项目之前通常希望得到答案的问题

我们希望社会各界能就此提出好的建议


谢谢。

您确实需要对您的用户体验进行一些假设,以便对并发用户进行初步的非负载测试评估。从用户会话的一些假设开始。合理的大概假设可能是(这可能不成立,取决于您网站的复杂性或简单性):

  • 每个用户每5秒点击一个新页面或资源(假设AJAXy)
  • 处理每个请求平均需要200毫秒
  • 一般来说,允许峰值的平均使用率为容量的25%是好的,对于峰值可能更大的社交网站来说,这一点甚至更为重要
然后你会说:

200个用户(200ms/5s)=>8个CPU平均需要*4个(对于25%的负载)=>32个CPU


我不认为这是特别以语言为中心的。内存不贵,有足够的内存。

就个人而言,我认为任何告诉你这个问题有一个通用解决方案的人都在骗你。如果他们是硬件供应商,这一点尤其正确

您只能基于与预期负载类似的负载进行类似的估计。稍后,您将了解到您弄错了,因为实际负载实际上与您用作估计的“相似”负载不太相似


希望你能从中吸取教训,下次做一个更好的估计。

老实说,除了做一个样本负载测试,我还没有找到一个获得合理估计的好方法。任何规模的应用程序中都有太多的变量:硬件(内存体系结构、CPU数量、磁盘体系结构)、软件(实现细节、操作系统、虚拟机[如果有]、数据库系统等)、环境(网络、冷却)和其他

这基本上是性能测试的一个特殊应用。在这个问题上,最聪明的人反复明确地说,你需要得到数字。因此,我能给出的最好建议是,在计划中尽可能早地提出对工作原型的需求,以便您可以获得这些数字计划这些数字随着时间的推移而变化,以便在每个检查点获得原型或工作版本,以便在项目时间线的整个过程中重新测试


您早期的估计可能与最终的数字没有什么相似之处,但至少您能够在关键时刻根据需要进行纠正,而不是最终意识到时间表中没有时间进行修复。

您正在询问如何定量地确定硬件需求


一、 然而,我们将从另一个角度来看待它。设计您的应用程序,使其能够向外扩展(适用于任何层)。从那里开始,部署硬件的迭代1。在上面运行一些公共测试版。收集一些真实的数字。并重新配置系统以满足更高的性能指标。重复。

所需的硬件更多地取决于软件的复杂性和质量,而不是用户数量或事务负载。唯一声称不是这样的人是硬件供应商