本文原文连接: http://blog.csdn.net/bluishglc/article/details/7641714
提要:本文主要的写作目的是解释集群方案中的一些重要的概念,然后引入另一种session管理机制:基于缓存的session管理。本文并不讲述如何配置apache和tomcat来实现集群和负载均衡,关于这方面内容,可参考我的另一篇文章:Linux下搭建tomcat集群全记录
1.实现应用服务器集群需要解决那些问题?
对于所有的应用服务器集群来说,都需要解决两个最基本也是最核心的问题:
1. 如何分散访问请求到集群的各个结点
2. 如何通过一种session管理策略,确保某一个结点失效后,其session数据能由其他结点获取以便其他结点接替失效结点,实现集群的容错(failover)
对于第一个问题,最简单最直白的想法当然是均匀散列请求到各结点,但是对于应用服务器而言,由于有session的存在,一种更好的处理方式是同一个session的相关请求分发到同一个结点进行处理,这就是所谓的“粘性ssession”(sticky session)方式的负载均衡,而前者就称之为:“非粘性ssession”(non-sticky session)方式的负载均衡.
对于第二个问题,多数的应该服务器(包括Tomcat在内)使用的是session复制(session replication)机制,即结点之间通过组播方式将各自的session发到其他所有结点上,如果其中一个访问出错,则另外结点仍然具有有效的session内容,从而能正常接管其session。由于服务器内置了session复制机制的实现,因而使用这种方案非常简单,只需要做简单的配置即可完成,但是其缺点也是很明显的,由于大量的session信息需要复制,在用户数量和集群数量达到一定规模后,session复制就有可能成为性能瓶颈。于是人们想到了别外一种解决策略:通过第三方缓存来存放sessiono数据,如果某一结点失效,被委任接替失效结点的服务器可以从缓存中恢复session.基于这种思想,在google code上有一款开源产品:memcached-session-manager。
2.memcached-session-manager的工作原理
首先,所有的tomcat节点需要安装memcached-session-manager,每一个tomcat会有自己的本地session,当一个请求执行完毕之后,如果对应的session之前不存在(也就是说这是某个用户的第一次请求),则将该session拷贝一份副本至memcached缓存,当该session的下一个请求到达时,会使用tomcat的本地session,请求处理结束之后,session的变化会同步更新到memcached缓存中对应的session里,从而确保本地session和缓存中的session始终保持一致。如果当前结点失效,下一个请求会被路由给另外一个tomcat处理,这个tomcat发现请求所属的session并不存在,于是它将查询memcached缓存,并将查询到的session恢复到本地,这样就完成了容错处理。(以上是sticky session模式为背景的解释,memcached-session-manager也支持non-sticky session。)
由于以缓存为基础的session管理不需要大量的数据复制,其性能表现更好,具有更好的伸缩性。
最后补充一点:实际上,除去有服务器端管理session,还有另一个种截然不同的管理方式,即将session作为cookie的一部分经过压缩和加密后存放在用户的本地浏览器上!
另外stackoverflow上面一片文章
http://stackoverflow.com/questions/10494431/sticky-and-non-sticky-sessions
分享到:
相关推荐
tomcat,(当 容器 中还是没有session 则从memcached1加载主 session 到 tomcat, 这种情况是只有一个memcached节点,或者有memcached1 出错时),Request请求结束时,将tomcat session更新至 主memcached1和备...
memcached session manager 1.9.6 适用于 tomcat 8 各版本 memcached session manager原作者是采用maven管理和编译项目,编译起来很麻烦 不同jar版本很容易造成出错,我因为项目需要,所以把他们编译好 . 顺便分享给...
分布式web server集群部署后需要实现session共享,针对 tomcat 服务器的实现方案多种多样,比如 tomcat cluster session 广播、nginx IP hash策略、nginx sticky module等方案,本文主要介绍了使用 redis 服务器进行...
tomcat使用memcached保存session所需的jar包 tomcat版本:7.0.68 memcached版本:1.4.31 修改tomcat/conf/context.xml文件,增加如下内容: memcachedNodes="n1:192.168.1.107:11111 n2:192.168.1.108:11111" ...
NULL 博文链接:https://ajita.iteye.com/blog/1848665
memcached session manager 1.9.6 适用于 tomcat 8 各版本 memcached session manager原作者是采用maven管理和编译项目,编译起来很麻烦 不同jar版本很容易造成出错,我因为项目需要,所以把他们编译好并且做好分类. ...
Tomcat和Apache集群和负载均衡配置 Tomcat版本:apache-tomcat-7.0.26 Apache版本:Apache2.2.25 jre版本:1.6.0_26 集群和负载均衡配置已整好,解压后,只要点击run.bat一键启动,即可看到集群效果。 运行成功后,...
tomcat-redis-session-manager-tomcat-7 Redis-backed non-sticky session store for Apache Tomcat
(2) session cluster:delta session manager 基于tomcat集群会话保持 分析:tomcat自身带的机制 session cluster,基于组播的方式,一个tomcat 被用户登录访问,记录session;通过组播给集群中的其他机器复制一份...
集群最有效的方案就是负载均衡,而实现负载均衡用户每一个请求都有可能被分配到不固定的服务器上,这样我们首先要解决session的统一来保证无论用户的请求被转发到哪个服务器上都能保证用户的正常使用,即需要实现...
tomcat用redis共享session需要的jar
nginx+iis+redis搭建的站点来解决session一致性的解决方案.docx
直接使用,把jar包放到Tocamt 7 lib的目录下 context.xml 添加如下: memcachedNodes= "n1:127.0.0.1:11211" sticky="false" lockingMode="auto" requestUriIgnorePattern= ".*\.(png|gif|jpg|css|js)$" ...
合并session的写操作,一个request里的多次session操作,只会写一次缓存; 支持Tomcat,netty等Web服务器,理论上j2ee的Web服务器都支持; 支持标准的session api,可以和其它组件无缝对接; 注意事项 假定是类似...
Memchached+Tomcat6|7session共享 kryo序列化所需要包 (已经更新至1.8.2版本) 1.将所有的包拷贝至tomcat目录下的lib下面; 2.修改conf/context.xml加下面的代码: memcachedNodes="n1:127.0.0.1:11211" ...
本文档主要是记录了自己在进行负载均衡及SESSION同步的测试。利用nginx的反向代理做负载均衡,利用sql server数据库做session共享。达到网站集群在负载均衡时,session可以同步。
NULL 博文链接:https://acooly.iteye.com/blog/1377732
包括nginx-1.10.3.tar.gz、nginx-sticky-module-1.1.tar.gz、zlib-1.2.8.tar.gz、openssl-1.0.1c.tar.gz、pcre-8.21.tar.gz以及按照过程可能的错误解决发法
1,tomcat8的配置: 1.1修改tomcat8.x/conf/context.xml的配置如下: <!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file ...
最新的[可选]集群Express,带有Socket.IO和[可选] MongoDB Sticky-Session 这是什么? 如果您仅能够生成一个进程,并且希望拥有一个具有static content serving的express应用程序,并且同时生成X个使用node并可以...