1

我的资源有限,所以我无法microservices使用 docker 和 kubernetes 设置完整的架构,并且我的应用程序正在不断地被用户使用。

我必须为每个新版本/热修复重新部署我的应用程序,你知道我怎样才能以最少的停机时间实现这一目标吗?

关于我的应用程序的信息:

  • 服务器中的启动持续时间:80 seconds
  • 港口:8080
  • 应用服务器:embedded tomcat
  • 春季启动版本:2.0.1.RELEASE.
  • 我支持公司nginx反向代理。
  • 打包:jar
  • 阶段:production

我想到了这个解决方案:

  • 设置内部nginx侦听端口 8080 而不是我的应用程序并转发到新端口。
  • 每次我想部署时,我都会在一个新的不同端口启动我的应用程序并更改 nginx conf 然后重新加载它。

有没有人遇到过这个问题?或任何想法如何实现它?

先感谢您。

4

1 回答 1

4

让运行公司 nginx 代理的人在您的应用程序的两个实例之间进行负载平衡,例如,一个在运行8080,一个在8081. 然后,您可以一次更新一个应用程序。您可能还需要将某些事情外部化,例如在单独的主机上运行任何会话管理,而不是依赖于内存中的会话处理。

upstream production {
    server 123.456.789:8080;
    server 123.456.789:8081;
}

server {
    listen 80;
    server_name some.host;
    location / {
        proxy_pass http://production;
    }
}

https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

您需要能够动态配置 Spring Boot 的服务器端口,以使应用程序侦听不同的端口。或者,您也可以让它们在不同的主机上运行。

于 2018-11-29T14:28:44.447 回答