`

Memcached-session-manager概述

 
阅读更多

    官方网站:http://code.google.com/p/memcached-session-manager/wiki/SetupAndConfiguration

 

    当用户数量和集群数量达到一定规模后,Session 复制就可能成为性能瓶颈。于是人们提出了 从第三方缓存恢复失效节点数据的方案,开源产品 Memcached-Session-Manager(下面简称MSM)就是基于这个思想。

MSM是一个高可用的Tomcat session共享解决方案,除了可以从本机内存快速读取Session信息(仅针对黏性Session)外,同时可使用memcached存取Session,以实现高可用。

对于非黏性Sessionmemcached直接存储session

memcached外,还可以其他缓存组件如memcachedbmembase等。

 

一、特性                                                                  

   支持Tomcat6Tomcat7

   支持黏性、非黏性Session

   无单一故障点

   可处理tomcat故障转移

   可处理memcached故障转移

   插件式session序列化

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

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

   JMX管理&监控

 

二、MSM解决的问题                                                                                                                              

假设你有一个Tomcat集群,使用黏性session,如何应对单点故障问题?为了应对更多的并发量和可用性,你可以不断的增加Tomcat节点,但是单点故障仍旧会是个问题:如果使用黏性Session,一个Tomcat故障时,其他Tomcat并不能接管故障Tomcat节点的Session

解决此问题的思路就是将黏性Session同时保存在Memcached中,如果单个Tomcat发生故障,集群中的其他Tomcat可以从Memcached中得到Session信息。

   【注】对于非黏性SessionMSM V1.4.0及以后版本已经支持

 

三、Sticky Session 模式下的工作原理                                       

  Tomcat 的本地 session  为主 sessionMemcached 中的 session 为备 session

    第一步,所有 Tomcat 节点都需要安装 MSM;每一个 Tomcat 会有自己的本地 session

    第二步,当一个请求执行完毕之后,如果对应的 session 在本地不存在(即这是某一个用户的第一次请求),则将该 session 复制一份至 Memcached

    第三步,当该 session 的下一个请求到达时,会使用 Tomcat 的本地 session。请求处理结束之后,session 的变化会同步更新到 Memcached,保证数据一致。

    第四步,如果当前 Tomcat 节点失效,下一个请求会被路由给其他 Tomcat。这个 Tomcat 发现请求所对应的 session 并不存在,于是它将查询 Memcached,如果查询到了,则恢复将其保存到本地session此次请求结束,如果session被修改,送回Memcached备份。

这样就完成了容错处理。

 

四、Non-sticky Session 模式下的工作原理                                    

Tomcat 的本地session为中转sessionmemcache1 为主 sessionmemcache2为备 session

第一步,收到请求,加载备 session 到本地容器;

session 加载失败,则从主 session 加载;

第二步,请求处理结束之后,session 的变化会同步更新到 memcache1 memcache2,并清除Tomcat 的本地 session

session data 要想存入 memcache,必须能序列化和反序列化。

 

上边介绍的是处理Tomcat故障转移,MSM又是如何处理Memcached故障转移呢?

如果一个Memcached故障,当前Memcached中的Session会转移到其他Memcached节点,同时,JSESSIONID被修改并送回浏览器。

如果使用黏性Session,应确保loadbalancer中配置生成的JSESSIONID无任何后缀。

SESSIONID的格式

 

MSM知道Memcached节点列表,这些节点标识会存储在SESSIONID中,SESSIONID值类似:602F7397FBE4D9932E59A9D0E52FE178-n1 【其中n1Memcached节点标识】

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics