如何估算支持X个用户/交易所需的硬件?

Ken*_*Lai 6 architecture

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

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

硬件规范将涉及所需的CPU数量,以及基本答案的内存量.

为了简化我的例子,我将在我的问题中坚持使用Java技术,但我真的想要一个技术中立的建议.

我知道这个问题涉及许多其他因素.例如,一个不同的框架(Wicket vs Struts vs Spring vs pure EJB J2EE architecture),分布式层数(一个盒子设置或三层设置).

但是考虑到一个人可能没有先前使用给定技术的经验(或者可能没有机会进行负载测试以找出所需的硬件是什么),并且在初始项目讨论期间总会出现这样的问题(和答案)作为前进的基线是必不可少的),你如何给出答案?

我曾考虑过通过估算每个用户会话可能占用的内存量来解决内存所需的问题,但肯定会出现框架/虚拟机开销.

但总的来说,我似乎无法推断出这个问题的良好解决方案,这个问题似乎总是浮出水面.负载测试肯定有助于解决它,但到那时项目已经准备就绪,这是客户在提交项目之前通常需要回答的问题.

希望社区能就这方面的良好方法提出建议.

谢谢.

ste*_*own 3

您确实必须对用户体验做出一些假设,才能对并发用户进行初始非负载测试估计。首先对用户会话进行一些假设。合理的大概假设可能是(这可能不成立,具体取决于您网站的复杂性或简单性):

  • 每个用户每 5 秒访问一个新页面或资源(假设 AJAXy)
  • 每个请求平均需要 200 毫秒来处理。
  • 一般来说,平均使用量为容量的 25% 以允许出现峰值通常是好的,对于峰值可能更大的社交网站来说更是如此。

那么你会说:

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

我不认为这特别以语言为中心。内存不贵,够用就行。