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

Dou*_*oug 5 tomcat

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

我想我也可以问,有什么明显的缺点吗?我想到的是,正如我所指出的那样,总体上可用的内存会减少(到了这一点,取决于您拥有的 web 应用程序的数量,您会饿死),并且还有更多的池连接被搁置每个实例。

wom*_*ble 8

这是一个令人难以置信的特定于应用程序的问题。我能想到的原因有很多,为什么它可能对任何一种方式都有好处。大部分的“多个Tomcat”阳性的反驳是用“好了,不要做那个,然后”,但“这是我们一直在做它的方式”是谁的人可能不应该做这些类型的一个强有力的论据决定(但通常是)。

遇到过为什么使用多个独立的 Tomcat 实例的原因包括:

  • 32 位操作系统意味着每个进程只有 4GB 的地址空间;机器有超过 4GB 的 RAM,您需要多个进程来利用所有系统 RAM。真正的解决方案:进入本世纪并安装 64 位操作系统。
  • 你有一个 64 位的操作系统,但你的应用程序只需要一个 32 位的扩展,因此你必须运行一个 32 位的 JVM(它转移到上一点。真正的解决方案:打破某人的手指——澳大利亚医疗保险,我'我看着
  • 应用程序遭受内存泄漏或锁争用,这意味着在所有内容都落入堆之前,可能的并发量是有限的。运行多个进程可以解决这个问题。真正的解决方案:如果多个进程真正工作,为您的工作负载(即,没有外部资源的争夺上),则缺乏内部并发的仅仅是一个错误。真正的解决方案:多折一些手指。最好是那些认为他们比像样的并行处理库的作者更聪明的人。

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

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