[置顶] 增量会话对象——DeltaSession

来源:互联网 发布:贪吃飒淘宝.com 编辑:程序博客网 时间:2024/05/16 12:16

在集群环境中为了使集群中各个节点的会话状态都同步,同步操作是集群重点解决的问题,一般来说有两种同步策略,其一是每次同步都把整个会话对象传给集群中其他节点,其他节点更新整个会话对象;其二是对会话中增量修改的属性进行同步。这两种同步方案各有优缺点,整个会话对象同步策略实现过程比较简单方便,但会造成大量无效信息的传输。增量同步方式则不会传递无效的信息,但在实现上会比较复杂因为涉及到对会话属性操作过程的管理。

这节讨论的正是增量同步方式中涉及的会话对象DeltaSession,这个对象其实是对标准会话对象的扩展使之具备在整个请求过程记录会话所有的增量更改。DeltaSession的类图如下,除了继承StandardSession类外还实现了ExternalizableClusterSessionReplicatedMapEntry三个接口,Externalizable接口主要提供对外部的对象读写操作,ClusterSession接口主要提供判断集群会话是否为原始的会话操作,只有原始会话才有资格使会话过期,ReplicatedMapEntry接口提供差异复制的操作。对于DeltaSession其实就是除了继承StandardSession特性外还要额外实现这三个接口。

 

    当客户端发起一个请求时,服务端对请求的处理可能涉及会话相关的操作,例如获取客户端某些属性再根据属性值进行逻辑处理,而且在整个请求过程中可能涉及多次的会话操作,为了将这些改变能同步到集群的其他节点上,必须要有一个机制来实现,实际上同步的颗粒度大小是很重要,颗粒度太大会导致同步不及时,而颗粒度太小则可能导致传输及性能问题,考虑到性能及可行性,tomcat同步的颗粒度是以一个完整的请求为单位的,即从客户端发起请求到服务器完成逻辑处理返回结果之前这段时间为同步颗粒度。这个过程中对某会话的所有操作(对同一个属性的操作只记录最新的操作)都会被记录下来,如下图,绿色箭头表示一个完整的请求过程,期间包括了四个修改属性操作,分别修改了属性abcd,这四个操作会被抽象成四个动作放进一个列表中,集群其他节点获取列表后根据这些动作就可以对自己本地对应的会话进行同步。

http://blog.163.com/cokeee1/blog/static/25504444920151073715601/
http://blog.163.com/cokeee1/blog/static/25504444920151073556902/
http://blog.163.com/cokeee1/blog/static/2550444492015107344092/
http://blog.163.com/cokeee1/blog/static/25504444920151073336967/
http://blog.163.com/cokeee1/blog/static/25504444920151073229671/
http://blog.163.com/cokeee1/blog/static/25504444920151073133823/
http://blog.163.com/cokeee1/blog/static/2550444492015107304828/
http://blog.163.com/cokeee1/blog/static/25504444920151072596145/
http://blog.163.com/cokeee1/blog/static/25504444920151072582404/
http://blog.163.com/cokeee1/blog/static/255044449201510725711128/
http://blog.163.com/cokeee1/blog/static/25504444920151072560340/
http://blog.163.com/cokeee1/blog/static/255044449201510725359569/
http://blog.163.com/cokeee1/blog/static/255044449201510725246630/
http://blog.163.com/cokeee1/blog/static/255044449201510725148775/
http://blog.163.com/cokeee1/blog/static/25504444920151072511626/
http://blog.163.com/cokeee1/blog/static/255044449201510725031379/
http://blog.163.com/cokeee1/blog/static/255044449201510724951354/
http://blog.163.com/cokeee1/blog/static/25504444920151072480947/
http://blog.163.com/cokeee1/blog/static/2550444492015107247657/
http://blog.163.com/cokeqq/blog/static/255065100201510721650390/
http://blog.163.com/cokeqq/blog/static/255065100201510721559863/
http://blog.163.com/cokeqq/blog/static/25506510020151072156411/
http://blog.163.com/cokeqq/blog/static/255065100201510721411267/

0 0
原创粉丝点击