使用 Quarkus 进行零停机部署

xyb*_*rek 2 java quarkus

Quarkus 很棒,但您无法进行零停机部署,不是吗?

我对 Quarkus 的体验非常有限,仅限于简单的 RESTful Web 应用程序。将其作为自己的容器在本机运行,没有 Jetty,也没有 Tomcat,因此它可以独立运行。

问题在于,如果不加以遏制,在应用程序服务器(例如提供开箱即用的零停机部署的 NGINX Unit)内部署 Quarkus Web 应用程序将非常痛苦,停机时间几乎为 100%,除非您采取一些巧妙的技巧。

我的问题是:您能否拥有基于 Quarkus 的零停机 Web 应用程序部署?如果是,怎么办?

Lad*_*cek 5

没有零停机部署的“巧妙技巧”。每个人都使用一个简单的原则(我很确定 Nginx Unit 也不例外):在应用程序前面添加一个负载均衡器。(听说 Nginx 不错...)

为了更新,您:

  1. 保持旧版本运行并保持负载均衡器指向它;
  2. 启动新版本;
  3. 当它完全启动时,将负载均衡器上的流量从旧版本重定向到新版本(这有多种变体,您可以立即或逐渐重定向流量,您可以进行会话耗尽等);
  4. 当旧版本不再使用时,停止并删除它。

Quarkus 非常适合在 Kubernetes 中运行,它提供开箱即用的零停机部署(使用与我上面描述的相同原理)。