分布式session

1. 分布式session不共享不同步问题

传统的session工作流程

该流程的问题是:不能跨不同域名共享。

2. Session共享问题解决方案

2.1 session复制

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

缺点:

    1)session同步需要数据传输,占用大量网络带宽,降 低了服务器群的业务处理能力

    2)任意一台web-server保存的数据都是所有webserver的session总和,受到内存限制无法水平扩展 更多的web-server

    3)大型分布式集群情况下,由于所有web-server都全 量保存数据。

所以此方案不可取

2.2 客户端存储

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

缺点:

    1)每次http请求,携带用户在cookie中的完整信息, 浪费网络带宽 

    2)session数据放在cookie中,cookie有长度限制 4K,不能保存大量信息 

    3)session数据放在cookie中,存在泄漏、篡改、 窃取等安全隐患 

因此该方案也不可取

2.3 hash一致性

利用ip地址的hash值是一定的这个特性,使用nginx的负载均衡,让同一个ip地址的访问每次访问都是访问同一台服务器。

优点:

    1)只需要改nginx配置,不需要修改应用代码 

    2)负载均衡,只要hash属性的值分布是均匀的,多台 web-server的负载是均衡的 

    3)可以支持web-server水平扩展(session同步法是不行 的,受内存限制) 

缺点:

    1)session还是存在web-server中的,所以web-server重 启可能导致部分session丢失,影响业务,如部分用户 需要重新登录 

    2)如果web-server水平扩展,rehash后session重新分布, 也会有一部分用户路由不到正确的session 

但是以上缺点问题也不是很大,因为session本来都是有有 效期的。所以这种反向代理的方式可以使用

2.4 统一存储

优点:

    1)没有安全隐患

    2)可以水平扩展,数据库/缓存水平切分即 可

    3)web-server重启或者扩容都不会有 session丢失 

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

上面缺点可以用SpringSession完美解决

2.5 不同服务——子域共享

jessionid这个cookie默认是当前系统的域名,当服务拆分之后,不同域名部署的时候,我们可以使用子域共享+统一存储(redis)的方式。

而SpringSession提供了一整套的解决方案。

官方参考地址:https://docs.spring.io/spring-session/docs/2.2.1.RELEASE/reference/html5/guides/boot-redis.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值