TongWeb的session复制原理

        session 复制是指TongWeb 之间session 信息可以实现共享。TongWeb 集群可以只配session 亲和,不配session 复制,这样只会造成客户端请求跳转到另一个TongWeb 节点上时session 信息丢失。也可以配session 亲和的同时配置session 复制,session信息在TongDataGrid中存储,这样客户端请求跳转到另一个TongWeb 节点上时session 信息不丢失,从TongDataGrid中恢复,但同时需要维护会话服务器TongDataGrid

       session复制只是解决session中的信息同步问题,应用的数据在各个TongWeb节点之间的同步依赖于应用自身完成,如:ehcache二级缓存的同步。

     正确的配置方式是:在session亲和下的session复制,这样可以保证TongWeb内存中的session与TongDataGrid中的session同步。若前端负载产品功能太差,不能保证session亲和,则会发生什么?如下图:

不亲和的情况下运行会是以下结果:

  1. 先访问TongWeb B执行了session.setAttribute("a","1")产生session,并存入值。
  2. session同步到TongDataGrid各个节点上。
  3. 由于不亲和访问TongWeb A,但不存在该session。
  4. 从TongDataGrid中恢复该session,并执行了session.setAttribute("b","2")。
  5. TongWeb A与TongDataGrid同步该session中值a=1,b=2。
  6. 由于不亲和再访问TongWeb B,执行session.getAttribute("b")。由于判断TongWeb B中已有该session对象,但不会校验存的值,不会从TongDataGird中恢复,所以取b值取不到。

      该设计的初衷是为了避免频繁从TongDataGrid中存取session造成性能瓶颈,从而在TongWeb处理session时,若TongWeb内存中有该session对象,则不再从TongDataGrid中获取。但是若前端负载实在不争气,就是不能保证session亲和,则必须配session复制,且要开启非亲和情况下的session复制。

  1. TongWeb启动脚本增加参数:-Dwebcluster.session.sticky=false。
  2. 某些版本可以在tongweb-web.xml中设置<property name="tongdatagrid-stick" value="false"/>

至少有一个参数设置则 TongWeb集群将运行在非亲和模式下,TongWeb将不再缓存任何session,所有session将从TongDataGrid中直接读取,这无疑增加了性能开销。 

题外话:

1. session复制已经是一种过时的免登录方案,目前应用常以单点登录(SSO)作为解决方案。 

2. 当采用Apahce shiro应用框架时,session是由shiro产生和管理的,这时session复制需要在shiro中配,见:shiro使用ehcache实现集群同步和session复制_坚持-CSDN博客

误区:tomcat是通过redis实现session复制,而TongWeb是通过TongDataGrid。可实现session复制即可,无需纠结用的是不是redis。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值