tomcat集群实现会话共享
在分布式架构里,Tomcat 的 Session 不再是单机,而要变成可跨节点访问的“共享状态”。核心目的是在多节点负载均衡时保持用户无感的一致会话体验。
主流方案分为三类:
- 会话复制
- 集中存储
- 彻底无状态化。
外部集中式会话存储
1.Redis Session Manager
Tomcat 不再自己存 Session,而是将 Session 存在 Redis,中间节点都读写同一个 Redis。
- 特点:
- 高可用、扩展性强。
- 读写独立,不受节点数量影响。
- 适合高 QPS,但要注意 Redis 的持久化策略与网络抖动。
- 典型架构流转图:
flowchart LR
A[用户请求] --> LB[负载均衡器]
LB --> T1[Tomcat-1]
LB --> T2[Tomcat-2]
T1 --> R[Redis 集中会话存储]
T2 --> R
- 适合场景:
- 标准互联网服务。
- Tomcat 多节点 + 可能的弹性扩容。
- Session量大、生命周期长(购物车、登录态等)。
- 数据库存储(JDBC Session Store)
- 可行但性能差,IO 密集,不适合高并发。
- 一般除非历史遗留,不推荐新项目使用。
彻底无状态化
1.机制:让 Tomcat 不保存 Session,状态全部放到客户端(如 JWT)或缓存层中。
- 演进方向:
- 使用 JWT 携带用户身份信息。
- 会话信息写到 Redis,不依赖 Tomcat 容器。
- 更进一步:业务尽量无 Session,按 token 拿用户态。
- 优势:
- 横向扩容完全无痛。
- 不再受限于 Session 生命周期。
- 适合容器化、Kubernetes、Serverless。
- 适用场景:
- 微服务、API 网关架构。
- 高并发、弹性伸缩强依赖场景。
方案对比
Redis Session Manager
- 优点:性能强、可扩展、成熟方案
- 缺点:Redis 挂了全站登录态一起挂;需高可用
无状态(JWT / Token 模式)
- 优点:扩展性无敌
- 缺点:业务需要改造,不是拿来即用。