【发布时间】:2019-05-01 07:38:45
【问题描述】:
我的资源有限,所以我无法使用 docker 和 kubernetes 设置完整的 microservices 架构,并且我的应用程序正在不断地被用户使用。
我必须为每个新版本/热修复重新部署我的应用程序,您知道我怎样才能以最少的停机时间实现这一目标吗?
关于我的应用的信息:
- 服务器中的启动持续时间:
80 seconds。 - 端口:
8080 - 应用服务器:
embedded tomcat - 春季启动版本:
2.0.1.RELEASE。 - 我在公司
nginx反向代理背后。 - 包装:
jar - 舞台:
production
我想到了这个解决方案:
- 设置内部
nginx侦听端口 8080 而不是我的应用程序并转发到新端口。 - 每次我想部署时,我都会在一个新的不同端口中启动我的应用程序并更改 nginx conf 然后重新加载它。
以前有人遇到过这个问题吗?或任何想法如何实现它?
提前谢谢你。
【问题讨论】:
-
对于正常的 Tomcat 设置,您可以在同一上下文路径上部署应用程序的多个版本。新用户将看到您应用的新版本。但不知道这在嵌入式 Tomcat 案例中如何工作:tomcat.apache.org/tomcat-9.0-doc/config/context.html#Naming
-
@Selaron 谢谢你的回答,确实我已经用springboot嵌入了tomcat,我正面临这个问题。要切换到 tomcat,我必须测量影响并复制我的所有配置并更改我的应用程序设计(不包括 tomcat 和 packagin 和..)
-
请运行公司 nginx 代理的人在您的应用程序的两个实例之间进行负载平衡,例如一个在
8080上运行,一个在8081上运行。然后,您可以一次更新一个应用程序。您可能还需要将某些事情外部化,例如在单独的主机上运行任何会话管理,而不是依赖于内存中的会话处理。 -
@AlexB +1 我很欣赏这个想法,因为 nginx 中有健康检查。谢谢
-
添加为可能的答案
标签: spring-boot tomcat downtime hot-reload