项目梳理——分布式session

当涉及不止一个,多台服务器的时候,即分布式情况下,就会出现不同服务器之间造成数据不一致的问题。举个例子,现在有三台服务器,ServerA,ServerB,ServerC,可以知道,ServerA生成的session,在ServerB、C上登录肯定是不会成功的,那么如何解决这个问题,使session可以共享呢?

1.session复制

这是最简单粗暴的方法。将A中的session对象复制给B、C,同时,B、C上有变化也要复制到A上去,同理,C上有变化也要复制到B上去。即,三者之间实现实时同步
方法:在tomcat中对server.conf进行修改配置开启session复制功能。

这种方法适用于数据量小的情况,如果加入更多的服务器,则容易造成网络风暴。

2.客户端存储

将session存到浏览器的cookie中。这样一来,我们就可以直接到cookie里面去从Headers拿到JsessionId的值,这样请求的时候就可以确定用户的身份了。

这种方法也相对于简单,但是,这样的数据存储在前端的网络传输存在易遭网络数据泄露、篡改、窃取等安全隐患,这同样也是cookie的问题。

3.反向代理hash一致性

还是假设我们有A、B、C三台服务器,当我们拿到用户请求的IP时,通过hash算法将这个IP指定到服务器A上。当下一次,只要是接收到同样的IP,都会直接指定到服务器A上。获得其他用户请求的IP指定到B、C服务器也是同理。

这种方法会导致有些服务器overload,有些服务器资源浪费,且如果web-server重启,一部分session会丢失,产生业务影响,例如部分用户重新登录如果web-server水平扩展;rehash后session重新分布,也会有一部分用户路由不到正确的session。
但相对来说也算比较简单、成本较低的。

4.后端统一集中存储

把用户信息等即session存储到web-server后端的存储层,第三方数据库或者缓存,一般用redis/memchache缓存。

这是目前采用的最多的一种方法,实现起来也比较简单,但是会增加一部分维护成本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值