为什么要使用集群?主要有两方面原因:一是对于一些核心系统要求长期不能中断服务,为了提供高可用性我们需要由多台机器组成的集群;另外一方面,随着访问量越来越大且业务逻辑越来越复杂,单台机器的处理能力已经不足以处理如此多且复杂的逻辑,于是需要增加若干台机器使整个服务处理能力得到提升。

如果说一个web应用不涉及会话的话,那么做集群是相当简单的,因为节点都是无状态的,集群内各个节点无需互相通信,只需要将各个请求均匀分配到集群节点即可。但基本所有web应用都会使用会话机制,所以做web应用集群时整个难点在于会话数据的同步,当然你可以通过一些策略规避复杂的额数据同步操作,例如前面说到的把会话信息保存在分布式缓存或数据库中统一集中管理,如下图,每个tomcat实例只需去写入或读取数据库即可,避免了tomcat集群之间的通信。但这种方式也有不足,要额外引入数据库或缓存服务,同时也要保证它们的高可用性,增加了机器和维护成本。

鉴于以上存在的不足,提供另一种解决思路就是tomcat集群节点自身完成各自的数据同步,不管访问到哪个节点都能找到对应的会话,如下图,客户端第一次访问生成会话,tomcat自身会将会话信息同步到其他节点上,而且是每次请求完成都会同步此次请求过程中对session的所有操作,这样一来下一次请求到集群中任意节点都能找到响应的会话信息,且能保证信息的及时性。细看很容易发现集群的节点之间的会话是两两互相复制的,一旦集群节点数量及访问量大起来,将导致大量的会话信息需要互相复制同步,很容易导致网络阻塞,而且这些同步操作很可能会成为整体性能的瓶颈,根据经验,此种方案在实际生产上推荐的集群节点个数为3-6个,无法组建更大的集群,而且冗余了大量的数据,利用率不高。

全节点复制的网络流量随节点数量增加呈平方趋势增长,也正是因为这个因素导致无法构建较大规模的集群,为了使集群节点能更加大,首要解决的就是数据复制时流量增长的问题,下节将介绍另外一种会话管理方式,每个会话只会有一个备份,它使会话备份的网络流量随节点数量的增加呈线性趋势增长,大大减少了网络流量和逻辑操作,可构建较大的集群。

========广告时间========

鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以到 https://item.jd.com/12185360.html 进行预定。感谢各位朋友。

[为什么写《Tomcat内核设计剖析》](http://blog.csdn.net/wangyangzhizhou/article/details/74080321)

=========================

从单机到集群会话的管理之集群模式一相关推荐

  1. 软考信息系统项目管理师_项目集 项目组合管理---软考高级之信息系统项目管理师025

    项目集 项目组合管理 项目集管理概述 项目集管理过程 项目集治理 项目集声明周期管理 项目集管理过程域 项目集的概念 可以看到如果两个项目,项目有共同的目标,很像,这个时候就可以用项目集的方式管理 如 ...

  2. Spring Security系列教程21--会话管理之实现集群会话

    前言 现在我们已经掌握了如何防御会话固定攻击,处理会话过期,对会话进行并发控制等,但是这些会话处理手段都是针对单机环境下的,在现在的大型项目中,很多时候都是采用分布式开发方案.一旦涉及到分布式方案,就 ...

  3. java 集群会话管理_架构设计之Spring-Session分布式集群会话管理

    前言 通常在web开发中,会话管理是很重要的一部分,用于存储与用户相关的一些数据.对于JAVA开发者来说,项目中的session一般由Tomcat或者jetty容器来管理. 特点介绍 尽管使用特定的容 ...

  4. 需要单机还是集群部署_5000W如何玩转Filecoin市场 部署最符合企业的集群模式

    5000W如何玩转Filecoin市场 部署最符合企业的集群模式 对 Filecoin集群的研究,其实一直以来都没有停止过. 如果我们将 Filecoin挖矿比作建高楼大厦.那么,集群就像打地基,地基 ...

  5. sql server配置管理器在哪里看ip_微服务管理平台nacos虚拟ip负载均衡集群模式搭建...

    一.Nacos简介 Nacos是用于微服务管理的平台,其核心功能是服务注册与发现.服务配置管理. Nacos作为服务注册发现组件,可以替换Spring Cloud应用中传统的服务注册于发现组件,如:E ...

  6. java基础巩固-宇宙第一AiYWM:为了维持生计,Redis基础Part7(Redis常见使用(部署)方式:单机模式、主从模式、哨兵模式、集群模式)~整起

    Redis持久化:RDB.AOF是针对存储在一台服务器上的数据由于存储过程被打断而发生丢失的情况的.此时,咱们肯定要考虑到,所有鸡蛋都放在一个篮子里是会出问题的. 如果服务器发生了宕机,由于数据恢复是 ...

  7. 使用 ezctl 工具部署和管理 Kubernetes 集群

    1 ezctl 命令行介绍 kubeasz 项目致力于快速部署高可用的 Kubernetes 集群,同时也提供了关于 Kubernetes 详细的学习资料,在这里强烈推荐给初学者.kubeasz 项目 ...

  8. hadoop历史背景hdfs分布式文件系统hadoop的集群模式单机模式伪分布

    hadoop历史背景&hdfs分布式文件系统&hadoop的集群模式&单机模式&伪分布 1.hadoop的历史背景 lucense ---->nutch----& ...

  9. Redis单机模式主从模式哨兵模式集群模式搭建

    文章目录 一.Redis下载及安装 1.1.下载 1.2.环境安装 1.3.编译安装 1.4.修改配置 1.5.启动Redis 1.6.验证Redis是否启动 1.7.进入到Redis客户端 1.8. ...

最新文章

  1. HDU4416(后缀自动机)
  2. 开发app用户协议_APP软件开发如何让用户更开心地付钱?
  3. 关于Jeecg互联网化dubbo改造方案(上)
  4. ZooKeeper 3.4.5 分布式环境搭建
  5. 收好这份来自大厂技术大咖的“远程办公指南”
  6. [转载]onclientclick和onclick区别
  7. 大数据之项目需求及架构设计
  8. linux光盘启动盘制作工具,Linux_最新万能 DOS 启动盘制作全攻略(软盘+光盘+U盘+硬盘+NTFS+应急实用工具),首先说明一下各种操作系统启 - phpStudy...
  9. 微信小程序(引入Iconfont 阿里巴巴矢量图标库 )
  10. 住宅IP和机房IP有什么区别,爬虫用哪种好?
  11. android像素密度转厘米,Android 屏幕适配-像素密度适配
  12. 算法提高 盾神与条状项链(静态链表)
  13. mysql 类似oracle dual_MySQL类似Oracle的dual虚拟表
  14. 华为光纤猫HG8240破解,开启路由功能表
  15. 01 JavaScript的前世今生
  16. osworkflow教程
  17. Unity FPS帧数设置
  18. Backtrack5安装
  19. 【Django】二手交易市场开发备忘录
  20. 收集一些可以发外链的网站

热门文章

  1. benchmark如何测试mysql数据库_MySQL的benchmark函数
  2. 【讨论】测试工程师能否作为一份终生职业?30岁+怎么办?
  3. Selenium自动化框架:数据驱动、关键字驱动和混合
  4. php登录实现session记住密码,利用php实现一周之内自动登录存储机制(cookie、session、localStorage)...
  5. java interface作用是什么_Java注解总结:史上最全,有这一篇就够了
  6. Lesson 3 Part 2 logistic regression
  7. pytorch创建datset
  8. 编写一个Applet在屏幕上画椭圆,椭圆的大小和位置由鼠标决定
  9. oracle的sql口令,Oracle数据库的SYS口令是什么?
  10. 用python写一个程序来验证每个数字的生成概率是否相同_Python实现简单生成验证码功能【基于random模块】...