分布式session
前端用户请求经过随机分发之后,可能会命中后端任意的Web Server,并且 Web Server
也可能会因为各种不确定的原因宕机。在这种情况下,session 是很难在集群间同
步的,而通过将session 以sessionid 作为key,保存到后端的缓存集群中,使得不管请求如何分
配,即便是Web Server 宕机,也不会影响其他Web Server 通过sessionid 从Cache Server 中获得
session,这样既实现了集群间的session 同步,又提高了Web Server 的容错性。
这里以 Tomcat 作为Web Server 来举例,通过一个简单的工具memcached-session- manager9,
实现基于memcache 的分布式session。
memcached-session-manager 是一个开源的高可用的Tomcat session 共享解决方案,它支持
Sticky 模式和Non-Sticky 模式。Sticky 模式表示每次请求都会被映射到同一台后端Web Server,
直到该Web Server 宕机,这样session 可先存放在服务器本地,等到请求处理完成再同步到后端
memcache 服务器;而当Web Server 宕机时,请求被映射到其他Web Server,这时候,其他Web
Server 可以从后端memcache 中恢复session。对于Non-Sticky 模式来说,请求每次映射的后端
Web Server 是不确定的,当请求到来时,从memcache 中加载session;当请求处理完成时,将session 再写回到memcache。
以 Non-Sticky 模式为例,它需要给Tomcat 的$CATALINA_HOME/conf/context.xml 文件配
置SessionManager,具体配置如下:
<Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
memcachedNodes="n1:192.168.0.100:11211,n2:192.168.0.101:11211"
sticky="false"
sessionBackupAsync="false"
lockingMode="auto"
requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$"
transcoderFactoryClass="de.javakaffee.web.msm.serializer.kryo.KryoTranscoderFactory"
/>
其中:memcachedNodes 指定了memcache 的节点;sticky 表示是否采用Sticky 模式;
sessionBackupAsync 表示是否采用异步方式备份session;lockingMode 表示session 的锁定模式;
auto 表示对于只读请求,session 将不会被锁定,如果包含写入请求,则session 会被锁定;
requestUriIgnorePattern 表示忽略的url;transcoderFactoryClass 用来指定序列化的方式,这里采用
的是Kryo 序列化,也是memcached-session-manager 比较推荐的一种序列化方式。
memcached-session-manager 依赖于memcached-session-manager-${version}.jar,如果使用的是
tomcat6,则还需要下载memcached-session-manager-tc6-${version}.jar,并且它还依赖memcached-
${version}.jar 进行memcache 的访问。在启动Tomcat 之前,需要将这些jar 放在$CATALINA_
HOME/lib/目录下。如果使用第三方序列化方式,如Kryo,还需要在Web 工程中引入相关的第三方
库,Kryo 序列化所依赖的库,包括kryo-${version}-all.jar 、kryo-serializers-${version}.jar 和
msm-kryo-serializer. ${version}.jar。
分布式session的更多相关文章
- 分布式session的实现
一.分布式Session的几种实现方式 1.基于数据库的Session共享 2.基于NFS共享文件系统3.基于memcached 的session,如何保证 memcached 本身的高可用性?4. ...
- 可扩容分布式session方案
分布式session有以下几种方案: 1. 基于nfs(net filesystem)的session共享 将共享服务器目录mount各服务器的本地session目录,session读写受共享服务器i ...
- NoSQL-Redis【2】-实现分布式Session
经过一周紧张的开发和调试,终于把Redis实现的分布式Session发布到了生产环境.我在本地测试了100万的数据,Redis的速度确实让我满意,期待在线上有更好的表现. 一.配置windows-se ...
- [Node.js] Node + Redis 实现分布式Session方案
原文地址: http://www.moye.me/?p=565 Session是什么? Session 是面向连接的状态信息,是对 Http 无状态协议的补充. Session 怎么工作? Sessi ...
- 基于ZooKeeper的分布式Session实现(转)
1. 认识ZooKeeper ZooKeeper—— “动物园管理员”.动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆颤的被 ...
- 微服务架构下分布式Session管理
转载本文需注明出处:EAII企业架构创新研究院(微信号:eaworld),违者必究.如需加入微信群参与微课堂.架构设计与讨论直播请直接回复此公众号:“加群 姓名 公司 职位 微信号”. 一.应用架构变 ...
- ASP.NET性能优化之分布式Session
如果我们正在使用Session,那么构建高性能可扩展的ASP.NET网站,就必须解决分布式Session的架构,因为单服务器的SESSION处理能力会很快出现性能瓶颈,这类问题也被称之为Session ...
- 分布式Session共享(二):tomcat+memcached实现session共享
一.前言 本文主要测试memcached实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port To ...
- 分布式Session共享(一):tomcat+redis实现session共享
一.前言 本文主要测试redis实现session共享的实现方式,不讨论如何让nginx参与实现负载均衡等. 二.环境配置 本测试在Window下进行 name version port Tomcat ...
随机推荐
- 删除windows7保留分区
在系统里以管理员运行CMD.exe键入diskpartsel disk 0 (select 选择硬盘)list vol (查看卷)sel vol 0 (选择卷,0为保留分区)inactive ( ...
- 为过程或函数sp_Adduser指定了过多的参数
前些天写用户注册模块,用存储过程添加用户,一开始就报“为过程或函数sp_Adduser指定了过多的参数”.仔细检查数据层的用户添加函数,结果在为存储过程添加sqlparameter参数的时候,数组给写 ...
- QT 下把编辑框内的中文字符转换为 char*
第一种方法 QString str(tr("你好")); wchar_t wc[100] = {0}; pEditShortDes->text().toWCharArray( ...
- VS2015如何另存解决方案文件-修改解决方案sln文件的路径
原文:VS2005如何另存解决方案文件-修改解决方案sln文件的路径 修改解决方案sln文件的路径 方法一:工具→选项→项目和解决方案,可设置项目的默认保存位置.方法二:"解决方案资源管理器 ...
- HttpWebRequest使用注意(发生阻塞的解决办法)
原文 http://www.cnblogs.com/Fooo/archive/2008/10/31/1323400.html HttpWebRequest使用注意(发生阻塞的解决办法) , count ...
- C++使用OLE高速读写EXCEL的源码
我的代码参考的地方是这儿,再次感谢原作者 http://blog.csdn.net/gyssoft/archive/2007/04/29/1592104.aspx 我根据自己的需要做了整理,干净了一点 ...
- POJ 3061 Subsequence(Two Pointers)
[题目链接] http://poj.org/problem?id=3061 [题目大意] 给出S和一个长度为n的数列,问最短大于等于S的子区间的长度. [题解] 利用双指针获取每一个恰好大于等于S的子 ...
- js获取智能机浏览器版本信息
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- asp.net发布网站(转)
1. 在Web项目中点击发布网站,如图1所示 图1 2. 选择要发布的路径——>“确定”,如果项目显示发布成功就可以了.如图2所示 图2 3. 打 ...
- Windows 配置JAVA的环境变量
Java是由Sun公司开发的一种应用于分布式网络环境的程序设计语言,Java语言拥有跨平台的特性,它编译的程序能够运行在多种操作系统平台上,可以实现“一次编写,到处运行”的强大功能. 工具/原料 JD ...