用于运行Java Web应用程序的单个服务器的可伸缩性

时间:2010-08-07 08:17:27

标签: java java-ee scalability

我希望获得有关部署到单个Tomcat实例的单服务器Java Web应用程序可以处理的工作负载规模的更多信息。特别是,让我假装我正在开发一个具有类似维基百科的使用模式的Wiki应用程序。如果我将服务器部署在具有以下配置的计算机上,我的服务器可以在内存不足之前可靠地处理多少请求,或者显示压力过大的迹象:

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

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

  • 前端的SpringMVC
  • Hibernate / JPA for persistence
  • DI和安全等的春天

如果你没有使用确切的配置,但有评估类似架构的可扩展性的经验,我也会非常有兴趣听到这个。

提前致谢。

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

5 个答案:

答案 0 :(得分:3)

您需要使用一组工具:

  1. 负载测试工具 - 可以使用JMeter。
  2. 监控工具 - 此工具将用于监控各种数量的资源负载。有批量付费和免费付款。的JProfiler,visualvm,等
  3. 收集和报告工具。 (未使用任何工具)
  4. 使用上述工具,您可以找到最佳价值。我会按照以下方式接近它。

    1. 将了解应该访问的页面的比例。什么是后台进程及其频率。
    2. 相应地配置我的JMeter(对于比率),并监控所应用负载的性能(服务页面的时间......可以在JMeter中完成),使用Monitor工具监控其他资源。还要检查错误率的计数。 (注意:您需要确定哪些错误率是不可接受的。)
    3. 逐步增加负载,并保持写入各种感兴趣的数据直到服务器完全失败。
    4. 您可以根据许多标准,低错误率,最长服务时间等来确定最佳值。 JMeter支持许多应用加载的方法。

答案 1 :(得分:3)

说实话,这几乎是不可能的。可能有大约3种方法(构建这样一个系统的最重要的方法),每种方式都有相当不同的性能特征。你最好的选择是建立和测试。

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

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

如果你的代码是合理的,那么瓶颈可能就是数据库,并且每秒db操作数区域的某个位置。如果这还不够,那么您可能需要考虑缓存。

答案 2 :(得分:0)

绝对可以查看Spring Insight进行性能监控和分析。

答案 3 :(得分:0)

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

英语维基百科每秒有大约3000页的浏览量。 tomcat可以通过仔细调整来处理负载,并且网络具有足够的吞吐量来为流量提供服务。

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

-

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

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

答案 4 :(得分:-1)

Tomcat不允许在多台计算机上传播。如果您真的关心可伸缩性,那么当您的应用程序超出单个计算机时,您必须考虑该怎么做。