我们的团队就是否应该将多个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/