Skip to main content
⚡ Calmops

Tomcat部署架构完整指南2026

Tomcat部署架构概述

Tomcat部署架构根据应用规模和需求不同,可以分为多种层级。

架构层级

1. 单节点架构

┌─────────────────────────┐
│      Client            │
└───────────┬─────────────┘
            │
            ▼
┌─────────────────────────┐
│     Tomcat Server      │
│  ┌─────────────────┐   │
│  │   Web App       │   │
│  └─────────────────┘   │
└─────────────────────────┘

适用场景

  • 开发/测试环境
  • 小型应用
  • 单用户访问

优点:简单、快速部署 缺点:无高可用性、单点故障

2. 负载均衡架构

┌─────────────────────────┐
│      Client             │
└───────────┬─────────────┘
            │
            ▼
┌─────────────────────────┐
│  Nginx / HAProxy        │
│    (负载均衡器)           │
└───────────┬─────────────┘
            │
     ┌──────┴──────┐
     ▼             ▼
┌─────────┐   ┌─────────┐
│ Tomcat 1│   │ Tomcat 2│
└─────────┘   └─────────┘

Nginx配置示例

upstream tomcat_cluster {
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
    # 权重配置
    server 192.168.1.12:8080 weight=2;
}

server {
    listen 80;
    server_name example.com;
    
    location / {
        proxy_pass http://tomcat_cluster;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

适用场景

  • 中型应用
  • 需要高可用性
  • 用户量适中

3. 带缓存的架构

┌─────────────────────────┐
│      Client             │
└───────────┬─────────────┘
            │
            ▼
┌─────────────────────────┐
│   Nginx / HAProxy       │
└───────────┬─────────────┘
            │
     ┌──────┴──────┐
     ▼             ▼
┌─────────┐   ┌─────────┐
│ Varnish │   │ Varnish │  (缓存服务器)
│  Cache  │   │  Cache  │
└────┬────┘   └────┬────┘
     │             │
     └──────┬──────┘
            │
            ▼
┌─────────────────────────┐
│     Tomcat Cluster      │
└─────────────────────────┘

Varnish配置示例

vcl 4.1;

backend tomcat1 {
    .host = "192.168.1.10";
    .port = "8080";
}

sub vcl_recv {
    # 不缓存登录用户的请求
    if (req.http.Cookie) {
        return (pass);
    }
}

sub vcl_backend_response {
    # 缓存静态资源1小时
    if (bereq.url ~ "\.(css|js|jpg|png)$") {
        set beresp.ttl = 1h;
    }
}

适用场景

  • 高流量网站
  • 大量静态资源
  • 需要快速响应

4. 完整分布式架构

┌─────────────────────────────────────────┐
│              Client                     │
└────────────────┬────────────────────────┘
                 │
                 ▼
┌─────────────────────────────────────────┐
│          Nginx / HAProxy                │
│           (负载均衡)                      │
└────────────────┬────────────────────────┘
                 │
        ┌────────┴────────┐
        ▼                 ▼
┌───────────────┐   ┌───────────────┐
│  Varnish      │   │  Varnish      │
│  Cache        │   │  Cache        │
└───────┬───────┘   └───────┬───────┘
        │                   │
        └────────┬──────────┘
                 │
        ┌────────┴────────┐
        ▼                 ▼
┌───────────────┐   ┌───────────────┐
│ Tomcat 1      │   │ Tomcat 2      │
│ (Session)     │   │ (Session)     │
└───────┬───────┘   └───────┬───────┘
        │                   │
        └────────┬──────────┘
                 │
        ┌────────┴────────┐
        ▼                 ▼
┌───────────────┐   ┌───────────────┐
│ Memcached    │   │  MySQL        │
│ (Session)    │   │  (Database)   │
└───────────────┘   └───────────────┘

Session共享配置(Memcached):

<!-- context.xml -->
<Manager className="de.myfocus.mngr.MemcachedBackupManager"
         memcachedNodes="n1:192.168.1.20:11211,n2:192.168.1.21:11211"
         requestUriIgnorePattern=".*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$"
         sticky="false" />

Session管理策略

1. Sticky Session(粘性会话)

upstream tomcat {
    ip_hash;  # 同一IP分配到同一Tomcat
    server 192.168.1.10:8080;
    server 192.168.1.11:8080;
}

2. Session复制

<!-- server.xml -->
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
    <Manager className="org.apache.catalina.ha.session.DeltaManager"
             expireSessionsOnShutdown="false"
             notifyListenersOnReplication="true"/>
</Cluster>

3. 外部Session存储

使用Redis或Memcached存储Session:

// Spring Session + Redis
@Configuration
@EnableRedisHttpSession
public class RedisSessionConfig {
    @Bean
    public LettuceConnectionFactory connectionFactory() {
        return new LettuceConnectionFactory();
    }
}

2026年推荐架构

规模 推荐架构 特点
小型 单节点 简单快速
中型 Nginx + Tomcat集群 高可用
大型 Nginx + Varnish + Tomcat集群 + Memcached 高性能
超大型 K8s + 微服务 弹性伸缩

性能优化建议

  1. JVM调优

    CATALINA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC"
    
  2. 连接池配置

    <Resource name="jdbc/mydb" 
              maxTotal="100" 
              maxIdle="30" 
              maxWaitMillis="10000"/>
    
  3. 启用压缩

    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
    

Comments