【问题标题】:Deploying Multiple Spring Boot Web Applications in Single Server在单个服务器中部署多个 Spring Boot Web 应用程序
【发布时间】:2018-05-17 10:59:14
【问题描述】:
我有 5 个 Spring Boot Web 应用程序,但只有一个服务器(低端)。
在一台服务器中部署所有 5 个的最佳方式是什么?只有一个 Web 容器(Tomcat)并将它们全部部署为同一个 Tomcat 上的单独 war 文件,或者在不同的 Tomcat 容器上运行所有 5 个(Spring Boot 默认行为)?
考虑到性能和可维护性,您有什么建议?
【问题讨论】:
标签:
java
spring
spring-mvc
tomcat
spring-boot
【解决方案1】:
我的建议是:
- 如果这些 WAR 彼此独立,请将它们部署在不同的 Web 服务器中,不仅是 Tomcat 或您正在使用的任何容器,还包括不同的虚拟服务器、专用服务器或云实例。
- 在不同的“虚拟服务器”中部署您可以水平扩展,因此这对未来的工作负载很有好处。
- 从您的托管服务提供商处部署负载平衡器,或者您可以使用 Nginx 来执行此操作。
希望这会有所帮助!
【解决方案2】:
恕我直言,如果您正在运行资源受限的服务器,最好的办法是将所有应用程序部署为单个 tomcat 实例下的 war 文件。运行多个服务器只会增加不必要的开销。
【解决方案3】:
如果您的服务器上的资源很少,您就没有太多选择。每个 Java 虚拟机都有很大的开销,因此运行单独的容器会让您更早地达到低端服务器的极限。
你将不得不在同一个 tomcat 服务器上部署你的战争,使用不同的 servlet 上下文。
但是,如果您有足够的 RAM,我认为最干净的方法是创建 docker 映像并在每个容器中运行独立的 spring-boot jar。
【解决方案4】:
根据我的经验,使用 docker 等容器是维护多个 spring-boot 应用程序的最简单方法。当您拥有一台新服务器时,它可以轻松迁移,并且可以在不中断其他应用程序的情况下更新应用程序。但是您可能需要花费额外的时间来学习如何使用容器。
如果使用Tomcat,建议将tomcat实例分开。每个 WAR 文件一个 tomcat。将多个 WAR 文件放在一个 tomcat 中会使维护变得困难。 Tomcat热部署/自动部署往往会出现一些错误,需要你重新启动整个tomcat