集群增量会话管理器——DeltaManager

简介: DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章节。

DeltaManager会话管理器是tomcat默认的集群会话管理器,它主要用于集群中各个节点之间会话状态的同步维护,由于相关内容涉及到集群,可能会需要一些集群通信相关知识,如果有疑问可结合集群相关章节。

集群增量会话管理器的职责是将某节点的会话该变同步到集群内其他成员节点上,它属于全节点复制模式,所谓全节点复制是指集群中某个节点的状态变化后需要同步到集群中剩余的节点,非全节点方式可能只是同步到其中某个或若干节点。在集群中全节点会话复制的一个大致步骤如下图所示,客户端发起一个请求,假设通过一定的负载均衡设备分发策略分到其中一个结点node1,如果还未存在session对象的话web容器将会创建一个会话对象,接着执行一些逻辑处理,在对客户端响应之前有个重要的事情是要把session对象同步到集群中其他节点上,最后再响应客户端。当客户端第二次发起请求时,假如分发到node3节点上,由于同步了node1session会话,所以在执行逻辑时并不会取不到session的值。如果删除某个会话对象则要同时通知其他节点把相应会话删除,如果修改了某个会话的某些属性也同样要更新到其他节点的会话中。

 

DeltaManager其实就是一个会话同步通信解决方案,除了具备上面提到的全节点复制外,它还有具有只复制会话增量的特性,增量是以一个完整请求为周期,即会将一个请求过程中所有会话修改量在响应前进行集群同步。往下看Tomcat具体实现方案。

为区分不同的动作必须要先定义好各种事件,例如会话创建事件、会话访问事件、会话失效事件、获取所有会话事件、会话增量事件、会话ID改变事件等等,实际上tomcat集群会有9种事件,集群根据这些不同的事件就可以彼此进行通信,接收方对不同事件做不同的操作。如下图,例如node1节点创建完一个会话后,即向其他三个节点发送EVT_SESSION_CREATED事件,其他三个节点接收到此事件后则各自在自己本地创建一个会话,会话包含了两个很重要的属性——会话ID和创建时间,这两个属性都必须由node1节点跟着EVT_SESSION_CREATED一起发送出去,本地会话创建成功后即完成了会话创建同步工作,此时你通过会话ID查找集群中任意一个节点都可以找到对应的会话。同样对于会话访问事件,node1向其他节点发送EVT_SESSION_ACCESSED事件及会话ID,其他节点根据会话ID找到对应会话并更新会话最后访问时间,以免被认为是过期会话而被清理。类似的还有会话失效事件(同步集群销毁某会话)、会话ID改变事件(同步集群更改会话ID)等等操作。

 

    Tomcat使用SessionMessageImpl类定义了各种集群通信事件及操作方法,在整个集群通信过程中就是按照此类定义好的事件进行通信,SessionMessageImpl包含的事件如下{ EVT_SESSION_CREATEDEVT_SESSION_EXPIREDEVT_SESSION_ACCESSEDEVT_GET_ALL_SESSIONSEVT_SESSION_DELTAEVT_ALL_SESSION_DATAEVT_ALL_SESSION_TRANSFERCOMPLETEEVT_CHANGE_SESSION_IDEVT_ALL_SESSION_NOCONTEXTMANAGER },除此之外它继承了序列化接口(方便序列化)、集群消息接口(集群的操作)、会话消息接口(事件定义及会话操作)。

 

集群增量会话管理器DeltaManager可以说是通过SessionMessageImpl消息来管理DeltaSession,即根据SessionMessageImpl里面的事件响应不同的操作。Tomcat的集群通信使用的是tribes组件(相关章节会对tribes组件详细分析),网络IO都交由tribes后应用可以更专注逻辑处理,DeltaManager存在一个messageDataReceived(ClusterMessage cmsg)方法,此方法会在本节点接收到其他节点发送过来的消息后被调用,且传入的参数为ClusterMessage类型,可转化为SessionMessage类型,然后根据SessionMessage定义的9种事件做不同处理。其中有一个事件需要关注的是EVT_SESSION_DELTA,它是对会话增量同步处理的事件,某个节点在一个完整的请求过程中对某会话相关属性的所有操作被抽象到了DeltaRequest对象中,而DeltaRequest被序列化后会放到SessionMessage中,所以EVT_SESSION_DELTA事件处理逻辑就是从SessionMessage获取并反序列化出DeltaRequest对象,再将DeltaRequest包含的对某个会话的所有操作同步到本地该会话中,至此完成会话增量同步。

 

    DeltaManager就是DeltaSession的管理器,它提供了会话增量的同步方式而不是全量同步,极大提高了同步效率。

 

点击订购作者《Tomcat内核设计剖析》



目录
相关文章
ElasticSearch Task命令说明
ElasticSearch task相关命令,以及返回信息解读。
5678 0
ElasticSearch Task命令说明
|
8月前
|
机器学习/深度学习 C语言 计算机视觉
YOLOv11改进策略【Neck】| HS-FPN:高级筛选特征融合金字塔,加强细微特征的检测
YOLOv11改进策略【Neck】| HS-FPN:高级筛选特征融合金字塔,加强细微特征的检测
685 11
YOLOv11改进策略【Neck】| HS-FPN:高级筛选特征融合金字塔,加强细微特征的检测
|
机器学习/深度学习 人工智能 运维
利用AIOps实现智能运维:提升IT运维的新策略
在数字化迅速发展的今天,传统IT运维已难以应对日益复杂的系统。AIOps通过融合AI、机器学习和大数据技术,革新了IT运维方式。其核心优势包括预测性维护、自动化处理、智能分析和资源优化。AIOps平台能自动检测、诊断并解决IT问题,显著提升运维效率。尽管面临数据质量、模型准确性和技术复杂性等挑战,但AIOps正逐步成为智能运维的重要趋势。
|
数据可视化
Open3d Point cloud outlier removal 点云异常值移除
Open3d Point cloud outlier removal 点云异常值移除
430 1
|
Java 测试技术 Spring
SpringBoot配置加载顺序
SpringBoot配置加载顺序
1051 0
|
关系型数据库 MySQL 数据安全/隐私保护
Docker 安装 MySQL5.7 和 MySQL8
Docker 安装 MySQL5.7 和 MySQL8
803 0
|
JSON 前端开发 决策智能
Multi-Agent实践第6期:面向智能体编程:狼人杀在AgentScope
本期文章,我们会介绍一下AgentScope的一个设计哲学(Agent-oriented programming)
|
Dubbo Java 应用服务中间件
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)
今天,我要向大家实现一个基于Netty实现的高性能远程通信框架!这个框架利用了 Netty 的强大功能,提供了快速、可靠的远程通信能力。 无论是构建大规模微服务架构还是实现分布式计算,这个分布式通信框架都是一个不可或缺的利器。
322 2
【分布式技术专题】「探索高性能远程通信」基于Netty的分布式通信框架实现(附通信协议和代码)(上)
|
存储 分布式计算 Kubernetes
JuiceFS-开源分布式文件系统入门(一篇就够了)
讲解JuiceFS的一些概念、架构以及实操的案例
7644 0
JuiceFS-开源分布式文件系统入门(一篇就够了)
|
XML JSON Java
[AIGC] 在Spring Boot中指定请求体格式
[AIGC] 在Spring Boot中指定请求体格式
423 0