深入拆解 Tomcat & Jetty
李号双
eBay 技术主管
38890 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
深入拆解 Tomcat & Jetty
15
15
1.0x
00:00/00:00
登录|注册

33 | Cluster组件:Tomcat的集群通信原理

ClusterListener
Deployer
Valve
Channel
Manager
SimpleTcpCluster
组播技术
单播
Tomcat A上的Session 2过期
Tomcat B接收到一个新请求,创建Session 2
Tomcat A接收请求,Session 1被用户注销
Tomcat A重新启动
Tomcat B接收Tomcat A的请求
Tomcat A崩溃
Tomcat A接收HTTP请求,创建Session 1
Tomcat B启动
Tomcat A启动
集群通信配置
组播
课后思考
本期精华
集群工作过程
集群通信原理
Tomcat集群通信原理

该思维导图由 AI 生成,仅供参考

为了支持水平扩展和高可用,Tomcat 提供了集群部署的能力,但与此同时也带来了分布式系统的一个通用问题,那就是如何在集群中的多个节点之间保持数据的一致性,比如会话(Session)信息。
要实现这一点,基本上有两种方式,一种是把所有 Session 数据放到一台服务器或者一个数据库中,集群中的所有节点通过访问这台 Session 服务器来获取数据。另一种方式就是在集群中的节点间进行 Session 数据的同步拷贝,这里又分为两种策略:第一种是将一个节点的 Session 拷贝到集群中其他所有节点;第二种是只将一个节点上的 Session 数据拷贝到另一个备份节点。
对于 Tomcat 的 Session 管理来说,这两种方式都支持。今天我们就来看看第二种方式的实现原理,也就是 Tomcat 集群通信的原理和配置方法,最后通过官网上的一个例子来了解下 Tomcat 集群到底是如何工作的。

集群通信原理

要实现集群通信,首先要知道集群中都有哪些成员。Tomcat 是通过组播(Multicast)来实现的。那什么是组播呢?为了理解组播,我先来说说什么是“单播”。网络节点之间的通信就好像是人们之间的对话一样,一个人对另外一个人说话,此时信息的接收和传递只在两个节点之间进行,比如你在收发电子邮件、浏览网页时,使用的就是单播,也就是我们熟悉的“点对点通信”。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Tomcat集群通信原理主要通过组播(Multicast)实现,以实现集群中成员的维护和通信。组播技术允许一台主机向指定的一组主机发送数据报包,通过周期性发送组播心跳包,集群中的节点能够维护一个成员列表,并在一定时间内未发送组播报文的节点被认为已经崩溃。这种方式能够保证集群中的多个节点之间保持数据的一致性,如会话(Session)信息。Tomcat的Session管理支持将一个节点上的Session数据拷贝到另一个备份节点的方式,从而实现数据的同步拷贝。 Tomcat集群通信的配置方法包括通过TCP连接向其他节点传输Session数据,以及对Session管理组件DeltaManager进行优化配置。在配置中,BackupManager被推荐用于高效的数据拷贝,而ReplicationValve用于请求过滤。此外,对于部署多个节点的情况,需要修改Receiver的侦听端口,并且建议所有Tomcat节点采用相同的配置。 通过了解Tomcat集群通信的原理和配置方法,读者能够深入了解Tomcat集群是如何工作的,以及如何对集群进行优化配置,从而提高集群的性能和可靠性。文章还通过实例说明了Tomcat集群的工作过程,以及对Session的拷贝支持两种方式:DeltaManager和BackupManager。 ReplicationValve的配置也得到了解释,为读者提供了更多实用的信息。 总的来说,本文详细介绍了Tomcat集群通信的原理、配置方法和工作过程,为读者提供了全面的了解和实用的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Tomcat & Jetty 》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • QQ怪
    感觉这种方式应该在生产环境用的很少吧,大多数都是用redis集群来保存session

    作者回复: 对的,Redis有额外安装维护开销,小的集群可以用Tomcat原生方案

    2019-07-25
    11
  • neohope
    老师您好,有两个问题想咨询一下: 1、采用DeltaManager模式后,如果主节点挂掉,存在新的主节点选举的这个过程吗?如果有的话,Tomcat是如何防止产生集群分裂(脑裂)的呢? 2、本节说的Tomcat集群部署,入口是Tomcat还是Apache啊? 之前只用过Apache做负载,后面放了Tomcat集群。但说实话,Tomcat session复制的效率还是太低了。 后面就直接Nginx+多个Tomcat,Session干脆放到了Redis里,效率高了很多。

    作者回复: 1,Tomcat集群其实没有Zookeeper那样的选主机制,一台挂了就将请求发到用备份节点 2,小的集群可以用Tomcat原生方案,大集群还是用Redis

    2019-07-25
    2
    6
  • chon
    生产中,如果机器多的话,很少用session复制吧

    作者回复: 对的

    2019-07-25
    5
  • Tomcat的Session同步机制有两种: 第一是所有集群机器中都保存一份其他机器的数据 第二是备份模式,Session数据保存在任意两台机器中。 我的问题是游戏服务器之间的数据同步是否也可以采用类似的机制呢?其中有两个挑战:一是玩家数据比较大,二是事务如何处理

    作者回复: 这个场景数据直接存数据库,用redis集群做缓存

    2019-07-30
    2
  • -W.LI-
    好老师哈。那些操作一般不会涉及session变化。BackupManager实现高可用,和好多中间件的原理差不多。以前都是接入层一致性hash,没有启用session集群。这个session集群同步开销高么?一次只同步一个seesion还是批量打包的?Tomcat支持把session放在redis么?我项目是token+redis。

    作者回复: Tomcat支持把Session存Redis的

    2019-07-26
    1
  • a、
    今天的问题:我觉得因为一般静态资源不会涉及到session更新,所以就不需要拦截。还有个问题我想问下老师,如果我有四台机器A,B,C,D,设置了BackupManager,那A的备份机器会不会是B,B的备份机器是C,C的备份机器是D,D的备份机器是A?还是说如果A的备份机器是B,那C只能选择D做备份机器?

    作者回复: A的备份机器是B,B的备份机器也可以是A。A和B只要不全挂掉就行。

    2019-07-25
    1
  • 旭东(Frank)
    这个集群感觉只是教学版,不工程版。应该很少用于生产
    2019-08-16
    1
    3
  • 业余草
    这些方法感觉有些过时了。比如我们可以自己实现一致性哈希算法,也就是说,针对不同的会话,我们给他算一个hash,让它分配到同一个tomcat上。
    2019-07-30
    3
    3
  • 你的头发还好吗
    针对 ReplicationValve 设置 filter值,这些静态文件不会改变 session 状态,不需要进行session同步操作。 翻阅源码: if (!isRequestWithoutSessionChange(uri)) { sendMessage(session,manager); }
    2022-04-05
    1
  • James
    小集群或者一开始没集群但是很久后流量较大或者保证可用性/防止部署时单点故障时可以使用,不过大部分或者一开始就是集群都是redis session集群
    2021-03-22
    1
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部