SpringSession - 分布式Session解决方案及SpringSession基本使用

分布式Session的几种解决方案

1、Session复制

在这里插入图片描述
Tomcat服务器互相同步session。
优点:
web-server (Tomcat) 原生支持,只需要修改配置文件
缺点:
1、session同步需要数据传输,占用大量网络带宽,降低了服务器群的业务处理能力
2、任意一台web-server保存的数据都是所有web-server的sesdion总和,受到内存限制无法水平扩展更多的web-server
3、大型分布式集群情况下,由于所有web-server都全量保存数据,所以此方案不可取。

2、客户端存储

在这里插入图片描述
将session存储在cookie中。
优点:
服务器不需存储session,用户保存自己的session信息到cookie中,节省服务端资源。
缺点:
这只是一种思路,不会使用该方式,具体原因如下:
1、每次http请求,携带用户在cookie中的完整信息,浪费网络带宽。
2、session数据放在cookie中,cookie有长度限制4K,不能保存大量信息。
3、session数据放在cookie中,存在泄漏、算改、窃取等安全隐患。

3、Hash一致性

利用ip_hash的一致性,浏览器不变,IP不变,让每一次访问都落在同一个服务器上。同时也可以配合id值,比如图中的sid=456的请求每次落在第一个服务器,sid=123的请求每次落在第二个服务器。
优点:
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、统一存储

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

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

jsessionid这个cookie默认是当前系统域名的。当我们分拆服务,不同域名部署的时候,我们可以使用如下解决方案:
在这里插入图片描述
第一次使用Sess

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值