一台高端服务器配备一台应用程序服务器还是多台应用程序服务器?

StackOverflow https://stackoverflow.com/questions/2543578

  •  23-09-2019
  •  | 
  •  

如果我有一台高端服务器,例如1T内存和8x4核CPU...

如果我运行多个应用程序服务器(在不同的 JVM 上)而不是只运行一个应用程序服务器,会带来更多性能吗?

在应用程序服务器上,我将运行一些相互交换消息的服务(带有消息驱动 bean 的 EAR)。

顺便问一下,java 64位现在不再有内存限制了吗?http://java.sun.com/products/hotspot/whitepaper.html#64

有帮助吗?

解决方案

如果我运行多个应用程序服务器(在不同的 JVM 上)而不是只运行一个应用程序服务器,会带来更多性能吗?

有几件事需要考虑:

  • 单个应用程序服务器意味着单点故障。对于许多应用程序来说,这不是一个选项,使用水平和垂直缩放是一种常见的配置(即每台机器有多个虚拟机和多台机器)。如果机器较小,添加更多机器显然会更容易/更便宜。

  • 大堆需要更长的时间来填充,因此应用程序在垃圾收集发生之前运行的时间更长。然而,较大的堆也需要更长的时间来压缩,并导致垃圾收集需要更长的时间。调整虚拟机大小通常意味着在频率和持续时间之间找到一个良好的折衷方案(换句话说,您并不总是希望为一台虚拟机提供尽可能多的 RAM)

因此,根据我的经验,运行托管多个 JVM 的多台机器是通常的选择(并且通常比大型野兽更便宜,并为您提供更大的灵活性)。

其他提示

当您需要进行进程外通信时,性能会自动受到影响,因此问题是应用程序服务器的扩展性是否不够好,因此无法获得回报。

作为基本经验法则,JVM 设计允许使用操作系统提供的任意数量的 CPU 和任意数量的 RAM。实际限制是特定于 JVM 实现的,在选择之前您需要非常仔细地阅读规范,看看是否有任何与您相关的限制。

如果您有一个可以利用硬件的 JVM,那么您就需要一个可以适当扩展的应用程序服务器。如今,一个常见的瓶颈是每秒可以处理的 Web 请求量 - 现代服务器应该能够每秒处理 10000 个请求(请参阅 http://www.kegel.com/c10k.html)但并非所有人都这样做。

因此,首先确定您最紧迫的需求(每秒连接数?内存使用情况?网络带宽?)并使用它来确定最佳平台 + jvm + 应用程序服务器组合。如果您有具体需求,供应商通常会很乐意协助您进行销售。

你很可能会通过跑步获益 具有较小堆的多个 JVM 而不是单个大型 JVM。造成这种情况的原因有几个:

  1. 较小的堆意味着 较短的垃圾 收藏品

  2. 更多 JVM 意味着 竞争较少 用于 JVM 内的内部资源,例如线程池和其他同步访问。

该框中应容纳多少个 JVM 取决于应用程序的用途。确定这一点的最佳方法是建立一个 负载测试 模拟生产负载并观察系统可以处理的请求数量如何随着添加的 JVM 数量而增长。在某些时候,您会发现添加更多 JVM 并不会提高吞吐量。那就是你应该停下来的地方。

然而,还有另一个考虑因素。最好有 多台物理机 而不是一个大的胖盒子。这就是可靠性。如果此盒子由于某种原因离线,它将带走其中运行的所有应用程序服务器。与单个机器相比,运行许多独立的较小物理机器的基础设施受单个机器故障的影响较小。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top