session共享解决方案

1.session复制

实现原理,通过重写HttpSession类,针对setAttribute方法做重写。设置时,自动将值同步到其他服务器。还需要防止session失效不同步,针对getAttrbute方法也要进行同步。

存在问题,假如说客户端先访问服务器A,这时服务A正在复制seesion到服务器B,此时网络繁忙导致复制失败重试,或者连接超时了。然后此时客户端又访问到了服务器B。就会造成session不一致。该方式仅适用于多台服务器在同一局域网中。这样网络延迟的问题极少,几乎不存在。

2.数据库储存session数据,

实现原理,重写setAttrbute方法于getAttrbute方法。set的时候自动将数据保存到数据库,get的时候从数据库读取数据。session失效了怎么同步呢?可以添加一个last-update-time记录最后访问时间,判断是否过期。

存在问题,数据库的数据时存在硬盘中的,然而session数据是经常访问的,会导致访问速度相当的慢。

3.采用redis缓存session数据

实现原理如同数据方式,区别在于该方式是通过写入到redis,访问速度会明显提高。

存在问题:假如说redis挂掉了,所有的服务区将全部挂掉。

4.通过zookeeper简单实现

根节点-》session节点-》sessionId节点(储存过期信息等)-》key节点(储存值)

相对比较好的实现方式,zookeeper本来就是分布式的实现,不存在单点故障问题。

猜你喜欢

转载自my.oschina.net/u/3551926/blog/1600165