分布式session各种解决方案

分布式Session问题

之前的代码在我们之后一台应用系统,所有操作都在一台Tomcat上,没有什么问题。当我们部署多台
系统,配合Nginx的时候会出现用户登录的问题。

原因

由于 Nginx 使用默认负载均衡策略(轮询),请求将会按照时间顺序逐一分发到后端应用上。
也就是说刚开始我们在 Tomcat1 登录之后,用户信息放在 Tomcat1 的 Session 里。过了一会,请求
又被 Nginx 分发到了 Tomcat2 上,这时 Tomcat2 上 Session 里还没有用户信息,于是又要登录。

解决方案:

  • Session复制

    • 优点
      无需修改代码,只需要修改Tomcat配置
    • 缺点
      Session同步传输占用内网带宽
      多台Tomcat同步性能指数级下降
      Session占用内存,无法有效水平扩展
  • 前端存储

    • 优点
      不占用服务端内存
    • 缺点
      明文存储,存在安全风险
      数据大小受cookie限制
      占用外网带宽
  • Session粘滞

    • 优点
      无需修改代码
      服务端可以水平扩展
    • 缺点
      增加新机器,会重新Hash,导致重新登录
      应用重启,需要重新登录
  • 后端集中存储 (redis)

    • 优点
      安全
      容易水平扩展
    • 缺点
      增加复杂度
      需要修改代码

猜你喜欢

转载自blog.csdn.net/qq_25905159/article/details/114400281
今日推荐