分布式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 ...
随机推荐
- android小知识之自定义通知(toast)
Toast是较为熟悉的通知,但默认方式比较单调,可以根据自己的需求自定义,在统一UI风格的时候可以单独拿出来做一个工具类来使用. 下面我在Fragment中定义的一个按键弹出自定义Toast,在Act ...
- Scale-up(纵向扩展) vs Scale-out(横向扩展)
转载:http://wuaner.iteye.com/blog/1843799 http://www.javaworld.com/article/2077780/java-web-developmen ...
- Android Studio 中快速提取方法
在开发过程中,有时在一个方法内部写了过多的代码,然后想要把一些代码提取出来封装下,分离开放在一个单独的方法里,可能你的做法是直接选中后Ctrl + 叉,或者 Ctrl + C,但在Android St ...
- Java基础—ClassLoader的理解(转)
默认的三个类加载器 Java默认是有三个ClassLoader,按层次关系从上到下依次是: Bootstrap ClassLoader Ext ClassLoader System ClassLoad ...
- VM 映像
让我们一起欢呼吧!随着最近Microsoft Azure运行时的发布,我们非常高兴地宣布发布 OS映像的继承性产品:新 VM映像.等一下-有些人可能会觉得这听起来有点耳熟.没错,一个月前在旧金山 ...
- BZOJ 无数据题集合
题目 http://www.lydsy.com/JudgeOnline/problem.php?id=1142 http://www.lydsy.com/JudgeOnline/problem.php ...
- ThinkPad x200为何总是CPU占用50%
2009年,我从美国买回一台ThinkPad X200 Tablet,Windows XP Tablet PC Edition 2005版,服役几年一直很正常.直到2012年初的时候,突然发现电脑非常 ...
- 10491 - Cows and Cars
描述:要么全选择牛,要么选择一辆车和p-1头牛,那么剩下n+m-p道门可以选择,求选择p道门以后要选择到车的概率 #include <cstdio> int main() { //freo ...
- Objective-C中NSArray和NSMutableArray的基本用法
/*---------------------NSArray---------------------------*/ //创建数组 NSArray *array1 = [NSArray arrayW ...
- OpenCV---图片生成视频
/** It is a batch processing interface. */ #include "stdafx.h" #include <windows.h> ...