【发布时间】:2014-05-30 03:51:18
【问题描述】:
我注意到很多项目(DropWizard、Grails 等)开始接受“胖”JAR(使用像 Jetty 或 Tomcat 这样的嵌入式 Web 服务器)的概念,而不是传统的 WAR 部署。两种方法都涉及单个 JVM 进程(即,无论向 Tomcat 部署多少 WAR,都是同一个 JVM 进程)。
在什么情况下哪一种部署方法比另一种更可取?
【问题讨论】:
-
传统的 WARs-to-Tomcat 适用于没有真正具有扩展/配置管理需求的内部应用程序(由内部用户/员工使用)。第二个您有一个需要面向公众的组件(Web 应用程序或 REST 服务等),您需要以自己的速度扩展该组件,并且您需要(嗯,应该)自动化组件所在节点的配置(参见 Ansible/Chef/Puppet/Salt/etc.)。在包含不同 WAR 文件组合的异构节点上实现扩展和 CM 自动化几乎是不可能的......
-
...例如:如果您有 10 个 Tomcat 节点和 30 个 WAR 文件(代表 30 个不同的组件),那么要实现自动化 CM,您需要定义节点的 types (数据库节点、应用程序节点、微服务节点、缓存节点等)并将 30 个组件的相同子集部署到每个节点类型。但是你会遇到扩展问题,因为每个 Tomcat 实例上共享的组件不可避免地会有不同的扩展要求。所以它归结为:你在部署什么,它的要求是什么?
-
内部组件与 WAR-to-Tomcat 一样好。 Web 规模的组件需要同质化,而这只能通过这些所谓的胖 JAR 来干净地实现。
标签: java tomcat deployment jvm war