【问题标题】:Scalability of a single server for running a Java Web application用于运行 Java Web 应用程序的单个服务器的可扩展性
【发布时间】:2010-08-07 08:17:27
【问题描述】:

我想更深入地了解部署到单个 Tomcat 实例的单服务器 Java Web 应用程序可以处理的工作负载规模。特别是,假设我正在开发一个 Wiki 应用程序,该应用程序具有类似于 Wikipedia 的使用模式。如果我将服务器部署在具有以下配置的机器上,我的服务器可以在内存不足或出现压力过大迹象之前可靠地处理多少并发请求:

  • 4核高端Intel Xeon CPU
  • 8GB 内存
  • RAID-1 中的 2 个 HDD(无 SSD,无基于 PCIe 的固态存储)
  • 的RedHat或Centos的Linux操作系统(64位) LI>
  • Java 6(64 位)
  • MySQL 5.1 / InnoDB

我们还假设 MySQL DB 与 Tomcat 安装在同一台机器上,并且所有 Wiki 数据都存储在 DB 中。此外,让我们假设 Java 应用程序构建在以下堆栈之上:

  • 前端的 SpringMVC
  • Hibernate/JPA 用于持久性
  • Spring 用于 DI 和安全等

如果您没有使用过确切的配置,但在评估类似架构的可扩展性方面有经验,那么我也很想知道这一点。

提前致谢。

编辑:我认为我没有正确表达我的问题。我将投票最多的答案标记为最佳答案,我将在社区 wiki 区域重写我的问题。简而言之,我只是想了解您的 Java 应用程序能够在一台物理服务器上处理的工作负载规模的经验,以及有关应用程序本身的类型和架构的一些描述。

【问题讨论】:

  • How many simultaneous requests can my server handle reliably before going out of memory or show signs of excess stress if I deploy it on a machine with the following configuration 回答这个问题意味着对应用程序(或简化但具有代表性的版本)进行基准测试。 IMO 没有单一的通用答案。
  • 删除了 spring 标签,因为它与问题不是特别相关。

标签: java jakarta-ee scalability


【解决方案1】:

您将需要使用一组工具:

  1. 负载测试工具-可以使用JMeter。
  2. 监控工具 - 此工具将用于监控各种数量的资源负载。有很多付费的和免费的。 Jprofiler、visualvm
  3. 收集和报告工具。 (没有使用任何工具)

使用上述工具,您可以找到最佳价值。我会按照以下方式处理它。

  1. 将了解被访问页面的比例应该是多少。什么是后台进程及其频率。
  2. 相应地配置我的 JMeter(用于比率),并监控应用负载的性能(服务页面的时间......可以在 JMeter 中完成),使用 Monitor 工具监控其他资源。还要检查错误率的计数。 (注意:您需要确定不可接受的错误率。)
  3. 不断增加负载,并不断写入各种感兴趣的数字,直到服务器完全失败。

您可以根据许多标准、低错误率、最长服务时间等来决定最佳价值。 JMeter 支持多种加载方式。

【讨论】:

  • 使用此配置,目标应该是识别主要瓶颈以及导致它们的场景/活动。有了这些信息,您将能够决定哪些因素或时间投资可能会给您带来最佳的工作/金钱回报。每次我查看一个相对不成熟的产品时,我都会发现一些可以显着提高性能的基本内容(并发用户数/延迟/吞吐量/...)。
  • 我完全同意在执行这些负载测试时检测瓶颈并修复它们。还可以调整 Tomcat 连接、数据库连接、缓存算法、您的应用程序配置等参数。这些都肯定会获得比当前更好的性能。
【解决方案2】:

说实话,这几乎是不可能的。可能有大约 3 种方法(在我的脑海中构建这样一个系统),每种方法都有相当不同的性能特征。最好的办法是构建和测试。

首先尝试了解您将拥有的估计数量以及您需要满足的延迟限制。

提出一个基本架构并通过系统实现端到端的薄片(理想情况下是最常见的用例)。使用负载测试工具(如GrinderApache JMeter)注入负载并开始测量性能。如果性能可以接受 - 保守一点,您的简单实现可能会包含更少的功能并且比完整系统更快 - 继续构建系统并进行测试以确保您不会引入主要的性能瓶颈。如果没有想出不同的设计。

如果您的代码是合理的,那么瓶颈可能是数据库以及每秒 100 多个 db ops 区域的某个地方。如果这还不够,那么您可能需要考虑缓存。

【讨论】:

    【解决方案3】:

    一定要看看Spring Insight 进行性能监控和分析。

    【讨论】:

      【解决方案4】:

      英文维基百科有 14GB 的数据。一个 8GB 的​​内存缓存会有非常高的命中/未命中率,我认为硬盘读取将在其容量范围内。因此,该应用很可能是网络绑定的。

      英文维基百科每秒大约有 3000 次页面浏览量。有可能tomcat可以通过仔细调整来处理负载,并且网络有足够的吞吐量来处理流量。

      所以整个维基百科站点可以托管在一台中等机器上?可能不是。只是一个想法。

      -

      http://stats.wikimedia.org/EN/TablesWikipediaEN.htm

      http://stats.wikimedia.org/EN/TablesPageViewsMonthly.htm

      【讨论】:

        【解决方案5】:

        Tomcat 不允许分布在多台机器上。如果您真的关心可伸缩性,则必须考虑当您的应用程序超出单台机器时该怎么办。

        【讨论】:

        • Tomcat 支持基本的集群和会话复制。此外,还可以使用 Terracotta 集群 Tomcat。
        猜你喜欢
        • 2013-06-26
        • 1970-01-01
        • 2011-07-09
        • 1970-01-01
        • 2011-06-19
        • 2014-09-13
        • 2016-06-03
        • 2021-09-22
        • 1970-01-01
        相关资源
        最近更新 更多