应用服务器的高可用设计主要基于服务无状态这一特性,但事实上,业务总
是有状态:

  • 在电商网站,需要有购物车记录用户的购买信息,用户每次购买请求都是向购物车中增加商品
  • 在社交类网站,需要记录用户的当前登录状态、最新发布的消息及好友状态等,用户每次刷新页面都需要更新这些信息

Web 应用中将这些多次请求修改使用的上下文对象称作会话(Session)。单机情况下,Session 可由部署在服务器上的Web 容器( 如Tomcat) 管理。
在使用负载均衡的集群环境中,由于负载均衡服务器可能会将请求分发到集群中的任何一台应用服务器上,所以保证每次请求依然能够获得正确的Session比单机时要复杂很多。

集群环境下,Session 管理主要有以下几种手段:

1 Session 复制

早期系统使用的一种服务器集群Session管理机制。应用服务器开启Web 容器的Session复制功能,在集群中的几台服务器之间同步Session对象,使得每台服务器上都保存所有用户的Session信息,这样任何一台机器宕机都不会导致 Session 数据丢失,而服务器使用Session时,也只需在本机获取。

1.1 优点

虽然简单,从本机读取Session信息也很快速,但只能使用在集群规模比较小的情况下

1.2 缺点

  • 当集群规模较大时,集群服务器间需要大量的通信进行Session复制,占用服务器和网络的大量资源,系统不堪负担
  • 而且由于所有用户的Session信息在每台服务器上都有备份,在大量用户访问的情况下,甚至会出现服务器内存不够Session使用的情况
  • 而大型网站的核心应用集群就是数千台服务器,同时在线用户可达千万,因此并不适用这种方案

2 Session绑定(黏滞sticky)

可利用负载均衡的源地址Hash算法实现。

负载均衡服务器(比如 nginx)总是将来源于同一IP的请求分发到同一台服务器上(也可以根据Cookie信息将同一个户的请求总是分发到同一台服务器上,当然这时负载均衡服务器必须工作在HTTP 协议层)。这样在整个会话期间,用户所有的请求都在同一台服务器上处理,即Session绑定在某台特定服务器上,保证Session总能在这台服务器上获取

  • 利用负载均衡的会话黏滞机制将请求绑定到特定服务器

但是Session绑定的方案显然不符合我们对系统高可用的需求。

缺点

一旦某台服务器宕机,那么该机器上的Session也就不复存在了,用户请求切换到其他机器后因为没有Session而无法完成业务处理

因此虽然大部分负载均衡服务器都提供源地址负载均衡算法,但很少有网站利用这个算法进行Session管理。

3 利用Cookie 记录Session

早期系统使用C/S架构,一种管理Session的方式是将Session记录在客户端,每次请求服务器的时候,将Session放在请求中发送给服务器,服务器处理完请求后再将修改过的Session响应给客户端
如今的B/S架构,网站没有客户端,但是可以利用刘览器支持的Cookie记录Session

3.1 缺点

  • 受Cookie大小限制,能记录的信息有限
  • 每次请求响应都需要传输Cookie,影响性能
  • 如果用户关闭Cookie,访问就会不正常

但是

3.2 优点

由于Cookie的

  • 简单易用
  • 可用性高
  • 支持应用服务器的线性伸缩
  • 而大部分应用需要记录的Session 信息又比较小

因此事实上,许多网站都或多或少地使用Cookie记录Session。

4 Session服务器

那么有没有可用性高、伸缩性好、性能也不错,对信息大小又没有限制的服务器集群Session管理方案呢?

答案就是Session服务器!利用独立部署的Session服务器(集群)统一管理Session,应用服务器每次读写Session时,都访问Session服务器

这种方案事实上是将应服务器的状态分离,分为

  • 无状态的应用服务器
  • 有状态的Session服务器

然后针对这两种服务器的不同特性分别设计其架构

对于有状态的Session服务器,一种比较简单的方法是利用

  • 分布式缓存
    即使用cacheDB存取session信息,应用服务器接受新请求将session信息保存在redis中,当应用服务器发生故障时,web服务器会遍历寻找可用节点,分发请求,当应用服务器发现session不在本机内存时,则去redis中查找,如果找到则复制到本机,这样实现session共享和高可用。

  • 数据库等

在这些产品的基础上进行包装,使其符合Session 的存储和访问要求。如果业务场景对Session 管理有比较高的要求,比如利用Session 服务集成单点登录(SSO)、用户服务等功能,则需要开发专门的Session服务管理平台。

应用服务器集群的Session管理相关推荐

  1. 应用服务器集群的session管理-多台服务器共享session问题

    应用服务器集群的session管理:这是我在一本网站技术架构分析的书上看到的.这一章主要写在高可用架构设计之下服务无状态这一特性下怎么管理会话(session).以下是几例解决方案(示例图为转载图片) ...

  2. CLAN文件服务器是什么,APUSIC应用服务器集群配置与管理.ppt

    APUSIC应用服务器集群配置与管理 方案2:使用软件Apache Load Balancer 好处:成本低 坏处:有一定的性能损失 使用Apache Load Balancer的缺陷是要采用sess ...

  3. Redis+Tomcat实现集群的Session管理

    Redis+Tomcat实现集群的Session管理 本地环境 JDK java version "1.8.0_102" Tomcat apache-tomcat-7.0.90 R ...

  4. Redis + Tomcat + Nginx 集群实现 Session 共享

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 蕃薯耀 链接 | www.cnblogs.com/fan ...

  5. 如何实现 集群化/Session 复制-doc(cluster-howto.html)

    源文档链接: http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html 翻译日期: 2014年3月19日 翻译人员: 铁锚 感受: Tomc ...

  6. 分布式集群的Session问题

    1.Session的实现 在Session开始时候,分配一个唯一的Session标识sessionId,通过Cookie把 sessionId 告诉浏览器,以后每次请求的时候,浏览器都会带上 sess ...

  7. Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享

    转载自  Redis+Tomcat+Nginx集群实现Session共享,Tomcat Session共享 一.Session共享使用tomcat-cluster-redis-session-mana ...

  8. 大型网站架构演进(4)使用应用服务器集群

    使用应用服务器集群是解决高并发的常用手段,当一台应用服务器的处理能力不足时,不要企图更换配置更高的服务器,对于大型网站而言,不管多么强大的服务器,都满足不了持续增长的业务需求,在这种情况下,更好的做法 ...

  9. Tomcat集群及Session共享

    Tomcat集群 由于单台Tomcat的承载能力是有限的,当我们的业务系统用户量比较大,请求压力比较大时,单台Tomcat是扛不住的,这个时候,就需要搭建Tomcat的集群,而目前比较流行的做法就是通 ...

最新文章

  1. 了解 WPF 中的路由事件和命令
  2. ios 侧滑返回停顿_iOS push侧滑返回功能实现方法
  3. 在NVIDIA Jetson TX2上安装TensorFlow
  4. android jni示例_Android GridLayoutManager示例
  5. 描绘质量属性的六个常见属性场景。
  6. 自定义Kettle数据库插件 1
  7. python的类方法、静态方法、实例方法_Python 类方法、实例方法、静态方法
  8. android手机无法开机自动启动,手机无法开机怎么刷机?安卓手机救砖教程
  9. 海康威视ivms-4200(v2.8.2.2_CN)监控软件安装教程
  10. glsl 抗锯齿锯齿_什么是抗锯齿?
  11. python 将繁体转换成简体
  12. CS231n课程笔记翻译:卷积神经网络笔记
  13. 先睹为快,Go2 Error 的挣扎之路
  14. SecureCRT Home End键
  15. 硬件-4-戴尔Inspiron 5577笔记本拆机
  16. 读书笔记:《枪炮、病菌与钢铁》与《1984》
  17. Attention机制介绍(原理+代码)
  18. React+Antd 无插件 实现多个输入框验证码功能 + 倒计时(附完整代码)
  19. 如何将手机投屏到windows10上?
  20. 小混混n多天不提编程,深刻反思

热门文章

  1. 神策军丨​每天起床第一句:你配得上 3000 万企业吗?
  2. cineam 4d 影视特效制作入门-视图及对象控制
  3. 电影特效用到什么计算机知识,总算认识什么是影视后期特效
  4. Python 实现 RFM 模型(详):用户行为分析模型,商业实践与数据分析实战(含可视化)
  5. Windows自带的记事本中换行(回车)替换符的解决方案——观止
  6. PACT parameterized clipping activation for quantization neural networks
  7. uboot的启动过程-FDT
  8. 高速公路超速处罚 (15 分)
  9. CSS居中方式(一)
  10. RTC音视频会议源码产地-哇谷IM即时通讯