单台服务器上有多个 Java 应用程序

单台服务器上有多个 Java 应用程序

在一台机器上托管数十个相当琐碎的 Java Web 应用程序的最佳方法是什么?这些应用程序将用于不同的客户端,因此将它们彼此隔离很重要,这样如果一个应用程序出现故障,它们就不会全部出现故障。我知道 Tomcat 可以单独处理多个应用程序,但让它们全部在单个 tomcat 实例中运行对我来说听起来有点可怕。每个应用程序一个 tomcat 实例似乎也很愚蠢,因为这些应用程序可能相当基础。

有什么想法吗?

答案1

如果它们相当简单,它们不太可能导致整个服务器瘫痪,因此您可以在一个或几个实例上运行它们。

如果它们不是那么简单,或者存在安全问题,那么就将它们分开。如果有很强的安全隐患,甚至可以将它们分成多个虚拟机。

答案2

首先,如果您的应用程序简单且BW较低,则可以使用更轻的Servlet容器。温斯顿非常基本的,码头如果你问我,对于中型到大型应用程序来说是一个很好的选择。

当然,所有应用程序都可能消耗大量资源并导致整个 JVM 崩溃。我通常会将所有表现良好的应用程序放在一个 JVM 中,而将表现不佳的应用程序分别放在一个 JVM 中。这尤其适用于假设自己拥有整个 JVM 的应用程序,调用 System.exit() 等。您还可以添加一些安全约束来防止这种情况发生,但在我看来,这样做效果甚微,您通常希望应用程序在出错时退出。

关于拥有多个 JVM 时的性能,可以将最小堆大小设置得相当高,限制最大内存使用量,并稍微调整一下 GC 算法以调整每个应用程序。JBoss 启动脚本中有很好的例子。

一个用于管理所有 JVM 的非常出色的软件是暴发户。它允许您设置重生规则并定义崩溃时的操作。如果您没有 Upstart,您可以随时使用 inittab,尽管 inittab 中的语法错误可能会造成严重后果 :)

答案3

我可能会选择 OpenVZ 虚拟化。它允许您创建比 vmware 等更轻量的单独容器。我将其用于普通网站、强制 FTP 服务器等。

答案4

除了其他答案之外,您还可以运行多个应用服务器。大多数应用服务器都可以安装到目录中并从那里运行;我在测试服务器时经常对 Tomcat 这样做。

该解决方案介于在一台服务器上运行所有应用程序和为每个应用程序配备一个完全虚拟化的操作系统之间。如果应用程序在不同的安装中运行,则只有在耗尽系统范围的资源(CPU、RAM、磁盘空间、网络带宽)时,它们才会相互影响。可以通过在操作系统或服务器级别应用适当的限制来防止这种情况,就像您需要对完全虚拟化所做的那样。

相关内容