java - 在同一 JavaEE 服务器中部署多个 WAR 应用程序

标签 java tomcat jakarta-ee architecture jboss

我们的团队就是否应该将多个WAR应用程序放到同一个JavaEE服务器(如Tomcat、JBoss、Websphere)进行了激烈的讨论。

对于相同的 JavaEE 服务器,因为

  • 共享同一台服务器的相同资源(CPU、内存、TCP端口)
  • 能够共享 session ,例如更轻松地启用单点登录
  • 相同的 JVM,能够访问 JVM 内部资源
  • 仅管理一台服务器的可维护性

对于多个 JavaEE 服务器,因为

  • 降低风险。如果与操作系统或硬件无关,当一台服务器停机时 级别故障,两个 WAR 应用程序也都关闭。
  • 明确部署。一个应用程序 部署到一台服务器。整个东西可以打包在一起 作为一个(例如单个 TAR)。备份更容易和独立 并在不影响另一个的情况下再次恢复。
  • 能够投入一定的资源。如果一个 WAR 应用程序更重要 比另一个,那么它的JavaEE服务器应该分配更多 堆大小,而另一个分配较少。
  • JavaEE 服务器的开销不会太大,因为硬件成本很低。不 需要共享相同的资源。
  • 如果两个 WAR 应用程序在同一个主域中,仍然可以共享 session ,例如通过 Cookie 启用单点登录。
  • 不同的WAR应用应该运行在独立的JVM上以防止非法访问
  • 仅管理一台服务器的可维护性

我知道在 Deploying multiple web apps in same server 有类似的帖子但这还不够详细。

是否有更多的论点支持或反对这种做法?哪种做法是行业标准?请分享您的意见。

最佳答案

不值得激烈讨论:)

与往常一样,答案取决于您的应用程序对资源、可用性等的要求。没有一种适合所有情况的答案或最佳实践。如果您可以在问题中阐明您的要求,那么我们可以针对每个要求给出具体的优缺点。

但是,对于您关于共享 TCP 端口的观点,许多服务器具有域的概念,域为端口、JDBC 连接池等资源创建单独的上下文。您可以将 WAR 部署到不同的域,它们将获得唯一的端口、上下文根和其他资源,但它们仍然共享同一个应用程序服务器实例。

关于java - 在同一 JavaEE 服务器中部署多个 WAR 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27287780/

相关文章:

java - 在 Java 中创建 .CSV 文件时日期格式受到干扰

java - Java 使用 Cassandra 的最佳 api/库是什么?

java - 是否有可能根据 URL 同时为同一个 Web 应用程序使用一种方式和相互 SSL

java - 如何在 Java war 文件中的 META-INF/context.xml 中的 Tomcat 8 上指定 "Context path"?

java - 用于访问 Liberty 中的数据源连接管理器 MBean 的通用对象名称

java - 如何使用ant添加jar操作

java - 在哪里可以找到 Java 或 Oracle 中现代投资组合统计的实现(例如夏普比率、排序比率等)

java - 抑制 Apache Tomcat stdout 上的警告

debugging - 无法在 Java 堆栈跟踪中看到 java 源文件

java - JAXB 生成的奇怪 XML 结构