4

我有一个在 Apache Tomcat 7 上运行的 Spring 应用程序,它完全提供基于 REST 的服务。我有大约 100 万人将在全球范围内使用它。我的问题是,是否有任何标准方法来计算所需的处理器数量以及此类站点所需的 RAM。因为我拥有最多的东西,但我想明智地订购产品。我正在认真地寻找一个公式或可以让我做这样一个估计的东西。请指出这一点。

或者请指出应该考虑的各种限制,以便启动和运行这样的基础设施。我希望你指出要求

  1. 运行 apache 的网络服务器
  2. 运行 Tomcat 的应用服务器
  3. 运行 Redis、postgres 和 mongodb 的数据库服务器。

万分感谢。

4

1 回答 1

5

我将尝试列出一些我能想到的限制条件,但可能还有更多:

运行 apache 的网络服务器

看看使用的文件句柄的数量(如果 apache 提供静态内容,如 css、javascript 或图像)。

此外,http 连接的数量可能是一个约束(通常每个并发用户一个)。

另一个限制可能是将请求传递给 tomcat 的 ajp 工作线程数。

内存限制要求可能不是那么大,但这取决于您的 apache 的功能。

运行 Tomcat 的应用服务器

在这里,会话的大小将是一个约束。请注意,根据会话超时,并发会话的数量可能远高于并发用户的数量(并非所有人都需要执行并发请求,但会话仍然需要内存)。

此外,可用于服务执行的线程数将是一个约束。您的服务响应越快,被阻塞的线程就越少,因此需要的线程就越少。

运行 Redis、postgres 和 mongodb 的数据库服务器。

对于数据库,至少有两个约束条件:连接数(每个具有 db 访问权限的请求至少需要一个)和用于查询缓存的内存(内存越多,可以缓存的查询结果越多,从而使响应更快)。

总体

对于需要 5000 - 10000 个并发用户的系统,您可能需要研究集群和负载平衡。这将允许您根据需要进行调整(如果您的资源已用完,您可以添加另一个节点,如果从不需要大多数资源,您可以删除节点)并且具有更高可靠性的额外好处(如果一个节点关闭系统可能较慢,但仍会运行)。

为了分析您的系统,您可能需要并模拟许多并发访问并监控关键参数(文件句柄、内存使用、使用的线程、数据库连接、http 连接等)。从少量用户开始(例如 10),然后稳步增加(例如增加到 100,然后 1000 等)。当访问时间低于某个(自定义)限制时,找到瓶颈,提供更多资源并重试。最终,您会发现一些趋势(例如,每 500 个用户的累积会话大小为 1GB),这将使您能够粗略估计更高数量的并发用户。

要模拟并发用户,请查看Apache JMeter

于 2013-08-19T16:12:39.763 回答