tomcat集群实现会话共享

在分布式架构里,Tomcat 的 Session 不再是单机,而要变成可跨节点访问的“共享状态”。核心目的是在多节点负载均衡时保持用户无感的一致会话体验

主流方案分为三类:

  • 会话复制
  • 集中存储
  • 彻底无状态化。

外部集中式会话存储

1.Redis Session Manager
Tomcat 不再自己存 Session,而是将 Session 存在 Redis,中间节点都读写同一个 Redis。

  1. 特点:
  • 高可用、扩展性强。
  • 读写独立,不受节点数量影响。
  • 适合高 QPS,但要注意 Redis 的持久化策略与网络抖动。
  1. 典型架构流转图:
flowchart LR
    A[用户请求] --> LB[负载均衡器]
    LB --> T1[Tomcat-1]
    LB --> T2[Tomcat-2]
    T1 --> R[Redis 集中会话存储]
    T2 --> R
  1. 适合场景:
  • 标准互联网服务。
  • Tomcat 多节点 + 可能的弹性扩容。
  • Session量大、生命周期长(购物车、登录态等)。
  1. 数据库存储(JDBC Session Store)
  • 可行但性能差,IO 密集,不适合高并发。
  • 一般除非历史遗留,不推荐新项目使用。

彻底无状态化

1.机制:让 Tomcat 不保存 Session,状态全部放到客户端(如 JWT)或缓存层中

  1. 演进方向:
  • 使用 JWT 携带用户身份信息。
  • 会话信息写到 Redis,不依赖 Tomcat 容器。
  • 更进一步:业务尽量无 Session,按 token 拿用户态。
  1. 优势:
  • 横向扩容完全无痛。
  • 不再受限于 Session 生命周期。
  • 适合容器化、Kubernetes、Serverless。
  1. 适用场景:
  • 微服务、API 网关架构。
  • 高并发、弹性伸缩强依赖场景。

方案对比

Redis Session Manager

  • 优点:性能强、可扩展、成熟方案
  • 缺点:Redis 挂了全站登录态一起挂;需高可用

无状态(JWT / Token 模式)

  • 优点:扩展性无敌
  • 缺点:业务需要改造,不是拿来即用。