分布式下session共享问题和解决

Posted lzghyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式下session共享问题和解决相关的知识,希望对你有一定的参考价值。

session原理

技术图片

 

 

 

分布式下session共享问题

技术图片

 

 

Session共享问题解决

1、session复制

技术图片

 

 

  • 优点 

     web-server(Tomcat)原生支持,只需要修改配置 文件

  • 缺点 

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

 

2、客户端存储

技术图片

 

 

  • 优点

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

  • 缺点

    都是缺点,这只是一种思路。 • 具体如下: • 每次http请求,携带用户在cookie中的完整信息, 浪费网络带宽 • session数据放在cookie中,cookie有长度限制 4K,不能保存大量信息 • 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、统一存储

技术图片

 

  • 优点:
  1. 没有安全隐患
  2. 可以水平扩展,数据库/缓存水平切分即 可
  3. web-server重启或者扩容都不会有 session丢失
  • 不足:
  1. 增加了一次网络调用,并且需要修改应 用代码;如将所有的getSession方法替 换为从Redis查数据的方式。redis获取数据比内存慢很多
  2. 上面缺点可以用SpringSession完美解决

5、不同服务,子域session共享

技术图片

 

以上是关于分布式下session共享问题和解决的主要内容,如果未能解决你的问题,请参考以下文章

Spring Session解决Session共享

分布式环境下,如何实现session共享

分布式集群环境下,如何实现session共享二(项目开发)

Redis解决websocket在分布式场景下session共享问题

面试官:分布式环境下,如何实现session共享

分布式集群架构场景优化解决方案:Session共享问题