深入拆解Tomcat & Jetty
李号双
eBay技术主管
立即订阅
6067 人已学习
课程目录
已完结 44 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | Java程序员如何快速成长?
免费
模块一 必备基础 (4讲)
01 | Web容器学习路径
02 | HTTP协议必知必会
03 | 你应该知道的Servlet规范和Servlet容器
04 | 实战:纯手工打造和运行一个Servlet
模块二 整体架构 (9讲)
05 | Tomcat系统架构(上): 连接器是如何设计的?
06 | Tomcat系统架构(下):聊聊多层容器的设计
07 | Tomcat如何实现一键式启停?
08 | Tomcat的“高层们”都负责做什么?
09 | 比较:Jetty架构特点之Connector组件
10 | 比较:Jetty架构特点之Handler组件
11 | 总结:从Tomcat和Jetty中提炼组件化设计规范
12 | 实战:优化并提高Tomcat启动速度
13 | 热点问题答疑(1):如何学习源码?
模块三 连接器 (9讲)
14 | NioEndpoint组件:Tomcat如何实现非阻塞I/O?
15 | Nio2Endpoint组件:Tomcat如何实现异步I/O?
16 | AprEndpoint组件:Tomcat APR提高I/O性能的秘密
17 | Executor组件:Tomcat如何扩展Java线程池?
18 | 新特性:Tomcat如何支持WebSocket?
19 | 比较:Jetty的线程策略EatWhatYouKill
20 | 总结:Tomcat和Jetty中的对象池技术
21 | 总结:Tomcat和Jetty的高性能、高并发之道
22 | 热点问题答疑(2):内核如何阻塞与唤醒进程?
模块四 容器 (8讲)
23 | Host容器:Tomcat如何实现热部署和热加载?
24 | Context容器(上):Tomcat如何打破双亲委托机制?
25 | Context容器(中):Tomcat如何隔离Web应用?
26 | Context容器(下):Tomcat如何实现Servlet规范?
27 | 新特性:Tomcat如何支持异步Servlet?
28 | 新特性:Spring Boot如何使用内嵌式的Tomcat和Jetty?
29 | 比较:Jetty如何实现具有上下文信息的责任链?
30 | 热点问题答疑(3):Spring框架中的设计模式
模块五 通用组件 (4讲)
31 | Logger组件:Tomcat的日志框架及实战
32 | Manager组件:Tomcat的Session管理机制解析
33 | Cluster组件:Tomcat的集群通信原理
特别放送 | 如何持续保持对学习的兴趣?
模块六 性能优化 (8讲)
34 | JVM GC原理及调优的基本思路
35 | 如何监控Tomcat的性能?
36 | Tomcat I/O和线程池的并发调优
37 | Tomcat内存溢出的原因分析及调优
38 | Tomcat拒绝连接原因分析及网络优化
39 | Tomcat进程占用CPU过高怎么办?
40 | 谈谈Jetty性能调优的思路
41 | 热点问题答疑(4): Tomcat和Jetty有哪些不同?
结束语 (1讲)
结束语 | 静下心来,品味经典
深入拆解Tomcat & Jetty
登录|注册

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

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

集群通信原理

要实现集群通信,首先要知道集群中都有哪些成员。Tomcat 是通过组播(Multicast)来实现的。那什么是组播呢?为了理解组播,我先来说说什么是“单播”。网络节点之间的通信就好像是人们之间的对话一样,一个人对另外一个人说话,此时信息的接收和传递只在两个节点之间进行,比如你在收发电子邮件、浏览网页时,使用的就是单播,也就是我们熟悉的“点对点通信”。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《深入拆解Tomcat & Jetty 》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(10)

  • 业余草
    这些方法感觉有些过时了。比如我们可以自己实现一致性哈希算法,也就是说,针对不同的会话,我们给他算一个hash,让它分配到同一个tomcat上。
    2019-07-30
    1
    3
  • QQ怪
    感觉这种方式应该在生产环境用的很少吧,大多数都是用redis集群来保存session

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

    2019-07-25
    2
  • 旭东
    这个集群感觉只是教学版,不工程版。应该很少用于生产
    2019-08-16
    1
  • chon
    生产中,如果机器多的话,很少用session复制吧

    作者回复: 对的

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

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

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

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

    2019-07-26
  • Liam
    避免复制的时候提及文件这类大数据吧?
    2019-07-26
  • 门窗小二
    思考题应该是静态资源不会更新session值吧!请问老师我也有跟neohope一样的一问,集群分裂的情况tomcat的处理方式
    2019-07-25
  • 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
  • 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
收起评论
10
返回
顶部