在 Apache 服务器后面拥有多个 Tomcat 实例有什么明显的好处吗?

在 Apache 服务器后面拥有多个 Tomcat 实例有什么明显的好处吗?

我们有 5 台物理服务器,它们前面有一个硬件负载平衡器,每台服务器都有一个 Apache 服务器,它使用 mod_jk 连接到三个(每台服务器)Tomcat 实例,所有服务器都部署了完全相同的 Web 应用程序。我主张删除其中一个 Tomcat(每台服务器),并增加剩余两个 Tomcat 的内存分配。我想知道是否需要两个,或者我们应该每个物理服务器只使用一对 Apache-Tomcat。我无法找到一个好的理由来解释为什么一开始要这样设置,但当我加入开发团队时就是这样的。

我想我也可以问一下,有什么明显的缺点吗?我想到的是,正如我所指出的,总体上可用的内存会减少(根据您拥有的 Web 应用程序数量,内存会变得紧张),而且每个实例所持有的池连接也会增加。

答案1

这是一个非常特定于应用程序的问题。我能想到的原因是,无论哪种方式,它都有好处。大多数“多个 tomcat”的正面说法都被反驳为“好吧,不要这样做那么”,但“我们一直都是这样做的”对于那些不应该做出此类决定(但通常会这样做)的人来说是一个强有力的论据。

原因我有遇到使用多个独立 Tomcat 实例的原因包括:

  • 32 位操作系统意味着每个进程只有 4GB 的地址空间;如果机器的 RAM 超过 4GB,则需要多个进程才能充分利用所有系统 RAM。真正的解决方案:进入本世纪并安装 64 位操作系统。
  • 你有一个 64 位操作系统,但你的应用程序需要一个 32 位扩展,因此你必须运行 32 位 JVM(这又回到了上一点)。真正的解决方案:打断某人的手指——澳大利亚医疗保险,我正在研究
  • 应用程序遭受内存泄漏或锁争用,这意味着在所有内容陷入堆之前,可能的并发量是有限的。运行多个进程可以解决这个问题。真正的解决方案:如果多个进程真的为你的工作量而工作(也就是说,没有外部的如果资源不足,那么内部并发性不足只是一个错误。真正的解决方案是:再折断一些手指。最好是那些认为自己比优秀的并行处理库的作者更聪明的人。

单一流程更好的原因包括:

  • 负载平衡器在将工作分配给后端方面永远不如进程内算法那么好(要么是因为进程内可以访问负载平衡器无法访问的各种信息,要么是因为进程内算法只是转移到工作队列场景)。因此,多个 JVM 之间的负载平衡效率较低。
  • 每个 JVM 的开销,包括 CPU 和内存使用情况。我希望这是不言自明的。

答案2

相关内容