我很好奇每个人如何处理以下性质的问题:
'我们需要创建应用程序A(例如电子商务网站)。它将使用技术B(例如java)。它必须支持C(例如200)个并发用户。我们需要什么样的硬件?'
硬件规范将涉及所需的CPU数量,以及基本答案的内存量。
为了简化我的例子,我将在我的问题中坚持使用Java技术,但我真的想要一个技术中立的建议。
我知道这样的问题涉及许多其他因素。例如,一个不同的框架(Wicket vs Struts vs Spring vs pure EJB J2EE architecture),分布式层数(一个盒子设置或三层设置)。
但是考虑到一个人可能没有先前使用给定技术的经验(或者可能没有机会进行负载测试以找出所需的硬件是什么),并且在初始项目讨论期间总会出现这样的问题(作为前进的基准,答案是必不可少的),你如何给出答案?
我曾考虑过通过估算每个用户会话可能占用的内存量来解决内存所需问题,但肯定会出现框架/虚拟机开销。
但总的来说,我似乎无法推断出这个问题的良好解决方案,这个问题似乎总是浮出水面。负载测试肯定有助于解决它,但到那时项目已经准备就绪,这是客户在提交项目之前通常需要回答的问题。
希望社区可以就此采取良好的方法提供建议。
感谢。
答案 0 :(得分:3)
您必须对用户体验做出一些假设,以便对并发用户进行初始的非负载测试估算。从关于用户会话的一些假设开始。体面的球场假设可能是(这可能不会取决于您网站的复杂性或简单性):
然后你会说:
200个用户(200ms / 5s)=> 8个CPU平均需要* 4(25%负载)=> 32个CPU。
我认为这不是特别以语言为中心的。记忆力并不贵,有足够的。
答案 1 :(得分:1)
就个人而言,我认为任何告诉你这个问题的一般解决方案的人都在骗你。如果他们是硬件供应商,那就更是如此。
您只能基于对预期负载的类似负载来进行此类估算。您稍后会得知您错了,因为实际负载与您用作估算的“类似”负载并不相似。
希望您能从中吸取教训,并在下次做出更好的估计。
答案 2 :(得分:1)
老实说,我没有看到没有好的方法来做出合理的估计而不做样本负载测试。在任何可观大小的应用程序中有太多变量:硬件(内存架构,CPU数量,磁盘架构),软件(实现细节,操作系统,虚拟机[如果有],数据库系统等),环境(网络,冷却)等。
这基本上是性能测试的特殊应用。关于这个问题的最聪明的人已经反复清楚地说过你需要获得数字。因此,我给出的最佳建议是在计划中尽可能早地设计工作原型,以便您可以获得那些数字和计划这些数字随时间变化,以便获得原型或工作每个检查点的版本都可以在项目时间表中重新测试。
您的早期估计可能与您的最终数字几乎没有相似之处,但至少您可以在关键时刻根据需要进行纠正,而不是到达最后才意识到修复计划中没有时间。< / p>
答案 3 :(得分:0)
您正在询问如何定量调整硬件要求。
然而,我会从另一个角度来看待它。设计您的应用程序,以便它可以向外扩展(适用于任何层)。从那里,部署您的硬件的迭代#1。对此进行一些公开测试。收集一些现实生活中的数字。并重新配置系统以满足更高的性能指标。重复。答案 4 :(得分:0)
所需的硬件更多地取决于软件的复杂性和质量,远远超过用户数量或交易负载的控制。唯一声称不是硬件供应商的人。