我希望获得有关部署到单个Tomcat实例的单服务器Java Web应用程序可以处理的工作负载规模的更多信息。特别是,让我假装我正在开发一个具有类似维基百科的使用模式的Wiki应用程序。如果我将服务器部署在具有以下配置的计算机上,我的服务器可以在内存不足之前可靠地处理多少请求,或者显示压力过大的迹象:
另外,我们假设MySQL数据库与Tomcat安装在同一台机器上,并且所有Wiki数据都存储在数据库中。此外,让我们假装Java应用程序构建在以下堆栈之上:
如果你没有使用确切的配置,但有评估类似架构的可扩展性的经验,我也会非常有兴趣听到这个。
提前致谢。
编辑:我想我没有正确地表达我的问题。我用最多的投票标记答案作为最佳答案,我将在社区维基区重写我的问题。简而言之,我只想了解您在 Java 应用程序能够在一台物理服务器上处理的工作负载规模的经验,以及有关应用程序本身的类型和体系结构的一些描述。
答案 0 :(得分:3)
您需要使用一组工具:
使用上述工具,您可以找到最佳价值。我会按照以下方式接近它。
您可以根据许多标准,低错误率,最长服务时间等来确定最佳值。 JMeter支持许多应用加载的方法。
答案 1 :(得分:3)
说实话,这几乎是不可能的。可能有大约3种方法(构建这样一个系统的最重要的方法),每种方式都有相当不同的性能特征。你最好的选择是建立和测试。
首先尝试了解您将拥有的估计数量以及您需要满足的延迟限制。
提出一个基本架构,并通过系统端到端地实现一个薄片(理想情况下是最常见的用例)。使用负载测试工具(如{Grinder或Apache JMeter)来注入负载并开始测量性能。如果性能可以接受 - 保守,您的简单实现可能包括更少的功能并且比整个系统更快 - 继续构建系统并进行测试以确保不会引入主要的性能瓶颈。如果没有提出不同的设计。
如果你的代码是合理的,那么瓶颈可能就是数据库,并且每秒db操作数区域的某个位置。如果这还不够,那么您可能需要考虑缓存。
答案 2 :(得分:0)
绝对可以查看Spring Insight进行性能监控和分析。
答案 3 :(得分:0)
英语维基百科有14GB的数据。一个8GB的内存缓存会有非常高的命中/未命中率,我认为硬盘读取将在其容量范围内。因此,应用程序很可能是网络绑定的。
英语维基百科每秒有大约3000页的浏览量。 tomcat可以通过仔细调整来处理负载,并且网络具有足够的吞吐量来为流量提供服务。
那么整个维基百科网站可以托管在一台中等机器上吗?可能不是。只是一个想法。
-
答案 4 :(得分:-1)
Tomcat不允许在多台计算机上传播。如果您真的关心可伸缩性,那么当您的应用程序超出单个计算机时,您必须考虑该怎么做。