Session共享方案

方案一:基于Nginx的ip_hash负载均衡

  • 其实就是对请求过来的ip地址对你的多少台可用的服务器进行取模,然后就会把你的请求通过Nginx的反向代理给分发到对应的服务器上。(这里会把可用的服务器放到一个数组中,如果取模得到的结果是几,就把请求分到服务器数组中的下标为几 的服务器上)

具体实现

需要你在Nginx.conf文件中进行对应的修改,根据自己的可用服务器

upstream backend{
    ip_hash;
    server 192.168.128.1:8080 ;
    server 192.168.128.2:8080 ;
    server 192.168.128.3:8080 down;
    server 192.168.128.4:8080 down;
 
}
server {
    listen 8081;
    server_name test.csdn.net;
    root /home/system/test.csdn.net/test;
    location ^~ /Upload/upload {
    proxy_pass http://backend;
 
    }
}
  • 优点:配置简单,对应用无侵入性,不需要修改代码;只要hash属性均匀的,多台web-service的负载也是均衡的;便于服务器的水平扩展;安全性较高
  • 缺点:服务器重启会造成部分session丢失;水平扩展的过程中也会造成部分session丢失;存在单点负载高的风险

方案二:基于Tomcat的session复制

这个解决方案其实就是当用户请求的时候,把产生的sessionID给复制到系统所有的服务器中,这样就能保证当用户请求的时候从服务器A可能调用到服务器B上的模块的时候,也能保证服务B也有该用户的sessionID,这样就不会再次让用户进行再次登录操作了。也就解决问题了。

具体实现

修改tomcat配置文件
1、修改server.xml中的Cluster节点
2、修改应用web.xml,增加节点:

方案三:使用Redis做缓存session的统一缓存

这种方案呢,其实就是把每次用户的请求的时候生成的sessionID给放到Redis的服务器上。然后在基于Redis的特性进行设置一个失效时间的机制,这样就能保证用户在我们设置的Redis中的session失效时间内,都不需要进行再次登录。

具体实现

修改应用的配置文件
1、增加redis client和spring session的依赖
2、修改web.xml配置,增加filter:springSessionFilter
3、修改spring配置文件,在容器中注入spring session和redis的相关bean​​​​​​​

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值