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 + 微服务 | 弹性伸缩 |
性能优化建议
-
JVM调优
CATALINA_OPTS="-Xms512m -Xmx2048m -XX:+UseG1GC" -
连接池配置
<Resource name="jdbc/mydb" maxTotal="100" maxIdle="30" maxWaitMillis="10000"/> -
启用压缩
gzip on; gzip_types text/plain text/css application/json application/javascript;
Comments