分布式Session共享问题解决

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

目录

  • 1、Session复制
    • 优点
    • 缺点
  • 2、客户端存储
    • 优点
    • 缺点
  • 3、Hash一致性
    • 优点
    • 缺点
    • 缺点解决办法
  • 4、统一存储(Redis)
    • 优点
    • 不足
    • 解决办法

1、Session复制

优点

Web-Server原生支持,只需要修改配置文件

缺点

  1. Session同步需要数据传输,占用大量网络带宽,降低了服务器群的业务处理能力
  2. 任意一台Web-Server保存的数据都是所有Web-Server的Session总和,受到内存限制无法扩展更多的Web-Server
  3. 大型分布式集群情况下,由于所有Web-Server都全量保存数据,所以此方案不可取

2、客户端存储

优点

服务器不需存储Session,用户保存自己的Session信息到Cookie中。节省服务端资源

缺点

都是缺点,这只是一种思路
具体如下:

  1. 每次http请求,携带用户在Cookie中的完整信息,浪费网络带宽
  2. Session数据放在Cookie中,Cookie有长度限制4K,不能保存大量信息
  3. Session数据放在Cookie中,存在泄露、篡改、窃取等安全隐患

这种方式不会使用

3、Hash一致性

优点

  1. 只需要改Nginx配置,不需要修改应用代码
  2. 负载均衡,只要hash属性的值分布是均匀的,多台Web-Server的负载是均衡的
  3. 可以支持Web-Server水平扩展(Session同步时不行的,受内存限制)

缺点

  1. Session还是存在Web-Server中的,所以Web-Server重启可能导致部分Session丢失,影响业务,如部分用户需要重新登录
  2. 如果Web-Server水平扩展,rehash后Session重新分布,也会有一部分用户路由不到正确的Session

缺点解决办法

因为Session本来都是有有效期的,所以这两种反向代理的方式可以使用。

4、统一存储(Redis)

优点

  1. 可以水平扩展,数据库/缓存水平切分即可
  2. Web-Server重启或者扩容都不会有Session丢失

不足

  1. 增加了一次网络调用,并且需要修改应用代码;如将所有的getSession方法替换为从Redis查数据的方式。Redis获取数据比内存慢很多

解决办法

用SpringSession完美解决

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注!
欢迎关注微信公众号:宝藏女孩的成长日记
让这个可爱的宝藏女孩在努力的道路上与你一起同行!
如有转载,请注明出处(如不注明,盗者必究)

你可能感兴趣的:(java,分布式,服务器,java)