分布式集群框架下解决session一致性问题

424 阅读1分钟

一、为什么会出现session不一致问题?

当用户发请求时,有多台服务器(tomcat)进行处理时,如果两次请求的服务器不同,会造成session未找到的问题。

image.png

二、如何解决这个问题

1.使用nginx的ip_hash负载策略

优点
本质上是会话粘滞(同一个客户端ip只能被路由到同一个服务ip)。

  1. 直接在nginx上配置即可,无需写多余代码。 缺点
  2. 如果某台服务器挂了,会影响整个服务。hash值改变
  3. 重启session丢失。
  4. 存在单点负载高的风险。(某台服务器一直被请求)

2.session复制

优点

  1. 不⼊侵应⽤
  2. 便于服务器⽔平扩展
  3. 能适应各种负载均衡策略
  4. 服务器重启或者宕机不会造成Session丢失 缺点
  5. 性能低
  6. 内存消耗
  7. 不能存储太多数据,否则数据越多越影响性能
  8. 延迟性

image.png

3.Session共享,Session集中存储(推荐)

优点

  1. 能适应各种负载均衡策略
  2. 服务器重启或者宕机不会造成Session丢失
  3. 扩展能⼒强
  4. 适合⼤集群数量使⽤ 缺点
    对应⽤有⼊侵,引⼊了和Redis的交互代码

image.png