Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在同一JavaEE服务器中部署多个WAR应用程序_Java_Tomcat_Jakarta Ee_Architecture_Jboss - Fatal编程技术网

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

在同一JavaEE服务器中部署多个WAR应用程序,java,tomcat,jakarta-ee,architecture,jboss,Java,Tomcat,Jakarta Ee,Architecture,Jboss,我们的团队就是否应该将多个WAR应用程序放入同一个JavaEE服务器(如Tomcat、JBoss、Websphere)进行了激烈的讨论 对于相同的JavaEE服务器,因为 共享同一服务器的相同资源(CPU、内存、TCP端口) 能够更轻松地共享会话,例如启用单一登录 相同的JVM,能够访问JVM内部资源 仅管理一台服务器的可维护性 对于多个JavaEE服务器,因为 降低风险。当一台服务器关闭(如果与操作系统或硬件无关) 级别失败,两个WAR应用程序也会关闭 明确部署。一个应用程序 部署到一台

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

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

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

  • 降低风险。当一台服务器关闭(如果与操作系统或硬件无关) 级别失败,两个WAR应用程序也会关闭
  • 明确部署。一个应用程序 部署到一台服务器。整个东西可以打包在一起 作为一个(如单一焦油)。备份更容易且独立 并在不影响他人的情况下再次恢复
  • 能够投入某些资源。如果一个WAR应用程序更重要 与另一个相比,它的JavaEE服务器应该分配更多的资源 堆大小,而另一个则分配得更少
  • JavaEE服务器的开销并不太大,因为硬件成本很低。不 需要共享相同的资源
  • 如果两个WAR应用程序位于相同的主域中,仍然可以共享 会话,例如启用Cookie单点登录
  • 不同的WAR应用程序应该在分开的JVM上运行,以防止非法访问
  • 仅管理一台服务器的可维护性
我知道在上有类似的帖子,但不够详细


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

不值得激烈讨论:)

答案通常是,这取决于您的应用程序对资源、可用性等的要求。没有一刀切的答案或最佳实践。如果你能在你的问题中明确你的要求,那么我们可以给出每个问题的具体优缺点


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

强烈要求它在同一硬件上运行两个独立的JavaEE服务器,因为如果一个关闭或重新启动,另一个仍处于活动状态。这有意义吗?这是工业实践吗?通常不仅仅是JavaEE应用程序服务器进入可用性等式(这是您问题的关键)。如果您的应用程序需要其他资源,如数据库、JMS、电子邮件等,那么您也需要考虑这些资源。至于JavaEE,一个常见的解决方案是使用集群实现高可用性。使用集群,您仍然可以拥有一个或多个应用程序域,如果一台服务器出现故障,其他服务器可以进行故障转移,如活动用户会话和数据库事务。如果您只是拥有两台独立的服务器,您将无法对活动用户会话之类的事情进行故障转移。您需要保证的可用性级别是一项业务决策,而不是一项技术决策,因此我将从这一点开始进行讨论,并引导您实现满足这些需求的技术实现。