使用 Quarkus 进行零停机部署
Zero-downtime deployments with Quarkus
Quarkus 很棒,但您不能进行零停机部署,还是可以?
我对 Quarkus 的体验非常局限于简单的 RESTful 网络应用程序。 运行 它本身就是自己的容器,没有 Jetty,没有 Tomcat,所以它自己运行。
问题是,在没有被包含的情况下,比如说在应用程序服务器内部(比如提供开箱即用的零停机时间部署的 NGINX Unit)部署 Quarkus Web 应用程序将非常痛苦,几乎 100% 停机时间,除非你做一些聪明的事情技巧。
我的问题是:你能部署零停机的基于 Quarkus 的 Web 应用程序吗?如果是,怎么做?
零停机部署没有“聪明的技巧”。每个人都使用一个简单的原则(我很确定 Nginx Unit 没有什么不同):在应用程序前面放置一个负载均衡器。 (听说Nginx不错。。。)
为了更新,您:
- 保留旧版本 运行 并让负载均衡器指向它;
- 开始新版本;
- 完全启动后,将负载均衡器上的流量从旧版本重定向到新版本(有多种变体,您可以一次或逐步重定向所有流量,可以进行会话排空等。 );
- 当旧版本不再使用时,停止并删除它。
Quarkus 非常适合 Kubernetes 中的 运行,它提供开箱即用的零停机部署(使用我上面描述的相同原理)。
Quarkus 很棒,但您不能进行零停机部署,还是可以?
我对 Quarkus 的体验非常局限于简单的 RESTful 网络应用程序。 运行 它本身就是自己的容器,没有 Jetty,没有 Tomcat,所以它自己运行。
问题是,在没有被包含的情况下,比如说在应用程序服务器内部(比如提供开箱即用的零停机时间部署的 NGINX Unit)部署 Quarkus Web 应用程序将非常痛苦,几乎 100% 停机时间,除非你做一些聪明的事情技巧。
我的问题是:你能部署零停机的基于 Quarkus 的 Web 应用程序吗?如果是,怎么做?
零停机部署没有“聪明的技巧”。每个人都使用一个简单的原则(我很确定 Nginx Unit 没有什么不同):在应用程序前面放置一个负载均衡器。 (听说Nginx不错。。。)
为了更新,您:
- 保留旧版本 运行 并让负载均衡器指向它;
- 开始新版本;
- 完全启动后,将负载均衡器上的流量从旧版本重定向到新版本(有多种变体,您可以一次或逐步重定向所有流量,可以进行会话排空等。 );
- 当旧版本不再使用时,停止并删除它。
Quarkus 非常适合 Kubernetes 中的 运行,它提供开箱即用的零停机部署(使用我上面描述的相同原理)。