文档章节

分布式集群系统下的高可用session解决方案

凯文加内特
 凯文加内特
发布于 2015/03/19 08:55
字数 951
阅读 149
收藏 6

目前,为了使web能适应大规模的访问,需要实现应用的集群部署. 而实现集群部署首先要解决session的统一,即需要实现session的共享机制。

 目前,在集群系统下实现session统一的有如下几种方案:

  • (1) 应用服务器间的session复制共享(如tomcat session共享)

  • (2) 基于cache DB缓存的session共享

应用服务器间的session复制共享

    session复制共享,主要是指集群环境下,多台应用服务器之间同步session,使session保持一致,对外透明。 如果其中一台服务器发生故障,根据负载均衡的原理,web服务器(apache/nginx)会遍历寻找可用节点,分发请求,由于session已同步,故能保证用户的session信息不会丢失。

 

此方案的不足之处:

  • 技术复杂,必须在同一种中间件之间完成(如:tomcat-tomcat之间).

  • session复制带来的性能损失会快速增加.特别是当session中保存了较大的对象,而且对象变化较快时, 性能下降更加显著. 这种特性使得web应用的水平扩展受到了限制。

  • Session内容序列化(serialize),会消耗系统性能。

  • Session内容通过广播同步给成员,会造成网络流量瓶颈,即便是内网瓶颈。  

基于cache DB缓存的session共享

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

目前有开源的msm用于解决tomcat之间的session共享:Memcached_Session_Manager(MSM)

http://code.google.com/p/memcached-session-manager/
一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。

特性

  • 支持Tomcat6、Tomcat7支持黏性、非黏性Session

  • 无单一故障点

  • 可处理tomcat故障转移

  • 可处理memcached故障转移

  • 插件式session序列化

  • 允许异步保存session,以提升响应速度

  • 只有当session有修改时,才会将session写回memcached

  • JMX管理&监控

该方案的不足之处:

  • memcache支持的数据结构比较单一

  • memcache的内存必须足够大,否则会出现用户session从Cache中被清除

  • 需要定期的刷新缓存

  • 服务器故障时,存在于内存的memcache数据将会丢失

 为了解决基于memcache中存在的不足,故提出了下面的一种解决方案:

基于redis缓存的session共享

 结合上面的 MSM 思想,由 redis负责 session 数据的存储,而我们自己实现的 session manager 将负责 session 生命周期的管理。

一般的系统架构:

图1

    此架构存在着当redis master故障时, 虽然可以有一到多个备用slave,但是redis不会主动的进行master切换,这时session服务中断。

    为了做到redis的高可用,引入了haproxy或者keepalived来解决redis master slave的切换问题。即:

图2

 

 此体系结构中, redis master出现故障时, 通过haproxy设置redis slave为临时master, redis master重新恢复后, 再切换回去. 此方案中, redis-master 与redis-slave 是双向同步的, 解决目前redis单点问题. 这样保证了session信息在redis中的高可用。

 

实现此方案:

nginx        1   192.168.1.102

tomcat1    1  

tomcat2    1

redis-master   1 

redis-slave      1

slave1     1

slave2     1

haproxy vip  1

 


本文转载自:http://tendyming.iteye.com/blog/1815136

凯文加内特
粉丝 340
博文 698
码字总数 110557
作品 0
青岛
后端工程师
私信 提问
「架构技术专题」如何构建网站高可用架构(详细分析篇)?(6)

网站的可用性(Avaliability)描述网站可有效访问的特性。 1、网站可用性的度量与考核 网站不可用时间(故障时间)=故障修复时间点-故障发现(报告)时间点 网站年度不可用时间=(1-网站不可...

java进阶架构师
2018/07/29
0
0
推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者
2016/09/27
416
0
以电商网站为例,谈大型分布式架构设计与优化

本文大纲: 1. 使用电商案例的原因 2. 电商网站需求 3. 网站初级架构 4. 系统容量估算 5. 网站架构分析 6. 网站架构优化 本文主题为电商网站架构案例,将介绍如何从电商网站的需求,到单机架...

科技小毛
2017/11/23
0
0
大型网站架构系列:电商网站架构案例(转)

转载地址: http://www.aboutyun.com/thread-17407-1-1.html 问题导读: 1、电商网站考虑的客户需求有哪些? 2、网站架构如何演变的? 3、电商架构优化需考虑哪些内容? 大型网站架构是一个系...

jbaowei2000
2017/07/22
0
0
大型网站技术架构 核心原理与案例分析 2016-4-17

第1篇 概述 1 大型网站架构演化 2 1.1 大型网站软件系统的特点 3 1.2 大型网站架构演化发展历程 4 1.2.1 初始阶段的网站架构 4 1.2.2 应用服务和数据服务分离 4 1.2.3 使用缓存改善网站性能 ...

jayronwang
2016/04/17
155
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
今天
231
4
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
今天
10
0
计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部