增量会话对象——DeltaSession
在集群环境中为了使集群中各个节点的会话状态都同步,同步操作是集群重点解决的问题,一般来说有两种同步策略,其一是每次同步都把整个会话对象传给集群中其他节点,其他节点更新整个会话对象;其二是对会话中增量修改的属性进行同步。这两种同步方案各有优缺点,整个会话对象同步策略实现过程比较简单方便,但会造成大量无效信息的传输。增量同步方式则不会传递无效的信息,但在实现上会比较复杂因为涉及到对会话属性操作过程的管理。
这节讨论的正是增量同步方式中涉及的会话对象DeltaSession,这个对象其实是对标准会话对象的扩展使之具备在整个请求过程记录会话所有的增量更改。DeltaSession的类图如下,除了继承StandardSession类外还实现了Externalizable、ClusterSession、ReplicatedMapEntry三个接口,Externalizable接口主要提供对外部的对象读写操作,ClusterSession接口主要提供判断集群会话是否为原始的会话操作,只有原始会话才有资格使会话过期,ReplicatedMapEntry接口提供差异复制的操作。对于DeltaSession其实就是除了继承StandardSession特性外还要额外实现这三个接口。
当客户端发起一个请求时,服务端对请求的处理可能涉及会话相关的操作,例如获取客户端某些属性再根据属性值进行逻辑处理,而且在整个请求过程中可能涉及多次的会话操作,为了将这些改变能同步到集群的其他节点上,必须要有一个机制来实现,实际上同步的颗粒度大小是很重要,颗粒度太大会导致同步不及时,而颗粒度太小则可能导致传输及性能问题,考虑到性能及可行性,tomcat同步的颗粒度是以一个完整的请求为单位的,即从客户端发起请求到服务器完成逻辑处理返回结果之前这段时间为同步颗粒度。这个过程中对某会话的所有操作(对同一个属性的操作只记录最新的操作)都会被记录下来,如下图,绿色箭头表示一个完整的请求过程,期间包括了四个修改属性操作,分别修改了属性a、b、c、d,这四个操作会被抽象成四个动作放进一个列表中,集群其他节点获取列表后根据这些动作就可以对自己本地对应的会话进行同步。
集群成员接收到某节点发送过来的同步消息后,将会逐一执行动作集里面的每个动作,下图大箭头表示同步的整个过程,最下面的为动作集列表,一共有4个动作,按顺序首先取出第一个update1动作,动作对象里面包含了指定修改哪个会话的会话id,根据此id去修改会话集对应的会话的属性。接着把剩下的其余3个动作执行完毕,于是完成了会话同步。
在tomcat中会话增量的具体由DeltaSession类实现,DeltaSession继承了StandardSession标准会话的所有特性且增加了会话增量记录的功能,增量记录功能即通过动作集实现,动作集被封装在DeltaRequest类,所以DeltaSession主要通过DeltaRequest实现动作集的管理,动作集由一个LinkedList<AttributeInfo>结构保存,AttributeInfo描述了动作的一些消息,所以一个动作就被抽象成了一个AttributeInfo对象,它主要包含四个属性 name(String)、value(Object)、action(int)、type(int),name表示会话的属性名,即哪个属性被改;value表示会话属性名对应的值;action表示动作类型,可能是设置属性也可能是删除属性;type表示会话哪种类别的属性将被修改。
整个增量会话的实现机制就是上面所说的,会话的增量拷贝比起全量拷贝有很多好处,即使实现相对比较复杂。
喜欢java的同学可以加下好友
增量会话对象——DeltaSession的更多相关文章
- 集群增量会话管理器——DeltaManager
DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章 ...
- 标准会话对象——StandardSession
Tomcat使用了一个StandardSession对象用来表示标准的会话结构,用来封装需要存储的状态信息.标准会话对象StandardSession实现了Session.Serializable.H ...
- Node.js_express_临时会话对象 session
临时会话对象 session 也是用来 解决 http 无状态协议的问题(无法区分多次请求是否发送自同一客户端) npm install express-session npm install con ...
- session会话对象
一.session会话对象介绍: 会话对象让你能够跨请求保持某些参数,它也会在同一个session实例发出的所有请求之间保持cookie. 二.步骤 1.对session对象进行一次实例化 2.进行登 ...
- [Xcode 实际操作]八、网络与多线程-(14)使用网址会话对象URLSession将地理坐标转换为地名
目录:[Swift]Xcode实际操作 本文将演示如果通过网址会话对象,将地理坐标转换为地名. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模式等优点. 在项目 ...
- [Xcode 实际操作]八、网络与多线程-(15)使用网址会话对象URLSession下载图片并存储在沙箱目录中
目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession下载图片并存储在沙箱目录中. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的 ...
- [Xcode 实际操作]八、网络与多线程-(16)使用网址会话对象URLSession下载图片并显示下载进度
目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession显示下载图片的进度. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模式 ...
- [Xcode 实际操作]八、网络与多线程-(17)使用网址会话对象URLSession向远程服务器上传图片
目录:[Swift]Xcode实际操作 本文将演示如何通过网址会话对象URLSession向远程服务器上传图片. 网址会话对象URLSession具有在后台上传和下载.暂停和恢复网络操作.丰富的代理模 ...
- Python Requests-学习笔记(10)-会话对象
会话对象让你能够跨请求保持某些参数.它也会在同一个Session实例发出的所有请求之间保持cookies. 会话对象具有主要的Requests API的所有方法. 我们来跨请求保持一些cookies: ...
随机推荐
- html5全解析
htm是软件开发中非常基础的知识,也是很重要的知识,在web中是很重要的知识点,在此梳理一下主要内容: 1.HTML是什么? 全称为HyperText Markup Language,超文本标记语言, ...
- 为什么不要在viewDidLoad方法中设置开始监听键盘通知
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个普遍的错误是,程序猿(媛)试图在view controll ...
- 剑指offer面试题6 重建二叉树(java)
注:(1)java中树的构建 (2)构建子树时可以直接利用Arrays.copyOfRange(preorder, from, to),这个方法是左开右闭的 package com.xsf.SordF ...
- GDB调试工具入门
从windows转到linux下已经有一段时间了,每次刷算法题碰到问题需要调试的时候,就分分钟想关机,切换到windows上调试.于是,花了一点时间来搜索一下linux下常见的调试工具,这不搜不知道, ...
- Android 系统当中各种尺寸单位的定义及使用
一,Android 各种标尺单位的含义: px:表示屏幕实际的象素.例如,320*480的屏幕在横向有320个象素,在纵向有480个象素.pt:表示一个点,是屏幕的物理尺寸.大小为1英寸的1/72.i ...
- EBS的性能调优
metalink Tuning performance on eBusiness suite (Doc ID 744143.1) 这篇文档描述了如何调查电子商务套件的整体性能下降. ...
- 关于USB驱动的软件测试方法
在工作中难免会使用一些外部设备挂载到平台进行测试,比如U盘,那么判断一个U盘是否能正常读写的方法如下: 1.在U盘中放入一个二进制文件(xxx.bin) 2.通过U盘在软件上读取该二进制文件,并计算其 ...
- 关于android app签名文件获取sha1和MD值
最近在做百度地图的嵌入,因为从同事接手的android app,所以第一次接触android的签名. 总的来说签名还比较简单,我用的是eclipse ADT自带的签名工具来做的签名,方法如下: 选择项 ...
- Cocos2D:塔防游戏制作之旅(九)
炮塔哲学:敌人,攻击波和路径点 在创建敌人之前,让我们先为它们"铺路".敌人将沿着一系列的路径点前进,这些路径点互相连接,它们被定义为敌人在你创建的世界中移动的路径. 敌人将在第一 ...
- 设计比较好,有助于学习的Github上的iOS App源码 (中文)
Github版 中文 : TeamTalk 蘑菇街. 开源IM. 电商强烈推荐. MyOne-iOS 用OC写的<一个> iOS 客户端 zhihuDaily 高仿知乎日报 Coding ...