1. 概述

Apache Tomcat(简称Tomcat)是Jakarta Servlet规范的开源实现。它作为Web服务器,接收HTTP或WebSocket请求并调用相应的Servlet处理请求。

本教程将介绍Tomcat的并行部署功能如何实现Web应用的零停机升级

2. Tomcat部署模式

使用Apache Tomcat部署Web应用有两种方式:第一种将Tomcat嵌入Java应用本身;第二种是将Tomcat作为独立Web服务器进程运行,服务一个或多个Web应用。后者模式下,开发者将应用打包为WAR文件,由管理员部署到Tomcat服务器。

虽然不如容器化流行,但共享Tomcat进程服务多个应用能显著提升资源利用率。当采用独立进程模式时,需要掌握零停机重部署技术。与依赖Kubernetes等外部编排器的容器化应用不同,Tomcat的部署依赖服务器自身机制来最小化升级停机时间

3. 并行部署实现零停机升级

Tomcat 7之前版本的重部署是破坏性的:必须重启服务器才能更新运行中的应用,这会导致服务中断且影响同实例的其他应用。

幸运的是,Tomcat 7引入了并行部署机制解决此问题:

3.1. 版本化部署

通过双井号(##)为WAR文件添加版本标识启用并行部署。例如将demo.war重命名为版本1:

$ mv demo.war demo##1.war

⚠️ 文件名中的版本信息不会影响应用的上下文路径,demo##1.war仍通过/demo访问。

后续升级只需部署新版本文件(如demo##2.war)。

3.2. 平滑升级机制

同应用不同版本的部署会自动触发并行部署

  1. 新版本应用启动
  2. 流量逐步切换到新版本
  3. ✅ 旧版本继续运行直至所有现有请求完成
  4. 最终旧版本可安全下线

这种机制确保升级过程零中断,现有用户请求不受影响。

4. 并行部署实战演示

通过实际操作展示并行部署过程:搭建Tomcat服务器 → 部署v1应用 → 升级到v2并验证双版本共存。

4.1. 安装运行Tomcat服务器

下载并解压Tomcat 10

$ wget -qO apache-tomcat-10.zip https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.24/bin/apache-tomcat-10.1.24.zip
$ unzip apache-tomcat-10.zip

启动服务器

$ ./apache-tomcat-10.1.24/bin/catalina.sh start
Using CATALINA_BASE:   /opt/tomcat-10/apache-tomcat-10.1.24
...
Tomcat started.

验证启动成功:

$ curl http://localhost:8080

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <title>Apache Tomcat/10.1.24</title>
        ...

4.2. 构建示例应用

准备两个版本的应用:

  • demo-v1.war:返回"Hello world - version 1"
  • demo-v2.war:返回"Hello world - version 2"

两者都提供GET /home接口,通过返回内容区分版本。WAR构建过程可参考Spring Boot WAR打包指南

4.3. 初始部署

部署v1版本(注意版本标识):

$ cp target/demo-v1.war /opt/apache-tomcat-10.1.24/webapps/demo##1.war

验证部署成功:

$ curl http://localhost:8080/demo/home
Hello world - version 1

4.4. 部署新版本

升级到v2版本

$ cp target/demo-v2.war /opt/apache-tomcat-10.1.24/webapps/demo##2.war

升级期间持续访问,观察响应变化:

$ curl http://localhost:8080/demo/home
Hello world - version 1  # 旧版本仍在服务
$ curl http://localhost:8080/demo/home
Hello world - version 1
...
$ curl http://localhost:8080/demo/home
Hello world - version 2  # 流量已切换到新版本

5. 总结

本文介绍了Tomcat作为WAR文件服务器的核心功能,强调了最小化重部署停机时间的重要性。重点说明了Tomcat 7+的并行部署机制如何实现零停机升级:

  • 通过##版本标识实现多版本共存
  • 新旧版本平滑过渡,确保现有请求不中断
  • 实战演示验证了升级过程的连续性

这套机制为传统Web应用提供了简单粗暴但有效的零停机升级方案,特别适合需要高可用性的生产环境。


原始标题:Zero-Downtime Web Application Upgrade in Tomcat With Parallel Deployment | Baeldung