`
utopialxw
  • 浏览: 369117 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【转 Tomcat集群session管理解决方案(关于sticky session、session replication与使用memcached缓存sess

阅读更多
本文原文连接: 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共享解决方案

    2. **使用共享存储**:另一种解决方案是利用共享存储,如数据库、Redis或Memcached等缓存服务来存储session。当session在某台服务器上创建或更新时,会写入到共享存储中,其他服务器可以通过查询共享存储获取session...

    tomcat7集群session共享memcache依赖包1.8.3

    总的来说,"tomcat7集群session共享memcache依赖包1.8.3"提供了一种有效的方法,解决了在Tomcat7集群中Session共享的问题,通过Memcached作为中间件,实现了跨节点的Session一致性,提高了系统的可用性和用户体验。...

    【全套】tomcat集群Session共享

    2. **选择Session复制策略**:Tomcat提供了几种Session复制策略,如黏滞会话(Sticky Sessions)、基于网络的复制(Network-based Replication)等。黏滞会话将用户的请求始终定向到最初创建Session的节点,而基于...

    Windows7 + Nginx + Memcached + Tomcat 集群 session 共享

    在Tomcat中,我们需替换默认的session管理器,使用支持Memcached的session管理器,如“MemcachedSessionManager”。上述web.xml配置中,`memcachedNodes`指定了Memcached服务器的地址,`sessionBackupAsync`控制是否...

    Memcached-Session-Manager多tomcat实现session共享配置

    Memcached-Session-Manager是解决这个问题的一个优秀解决方案,它允许我们将用户的Session数据存储在内存缓存系统——Memcached中,从而实现跨Tomcat实例的Session共享。下面将详细介绍Memcached-Session-Manager的...

    apache + tomcat 集群+session复制解决方案

    Apache 和 Tomcat 集群配合 Session 复制是一种常见的高可用性和负载均衡解决方案,尤其适用于大型网站和企业级应用。以下将详细解释这个方案的关键点。 **整体方案策略** 1. **部署逻辑图** 部署逻辑通常包括...

    Tomcat集群Session共享

    以下是几种常见的Tomcat集群Session共享方案,包括其实现过程、优缺点和可能遇到的问题。 1. **基于Cookie+Redis+Filter解决方案** - 实现过程:用户登录后,将Session ID与用户信息存入Redis,并在客户端设置一个...

    Tomcat集群Session共享所有文件.zip

    - **兼容性**:确保所使用的解决方案与当前的Tomcat版本(这里是Tomcat9)和JDK版本(这里是JDK1.8)兼容。 - **安全性**:在使用共享Session时,需考虑安全问题,防止Session劫持和Session固定攻击。 - **性能**:...

    tomcat8集群实现session共享,内含session共享包

    3. **分布式缓存(如Redis或Memcached)**:使用分布式缓存系统作为Session存储。这种方法具有高性能和可扩展性,但需要额外的硬件或云服务。 4. **粘滞会话(Sticky Sessions)**:不直接共享Session,而是通过...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享.docx

    【Nginx+Tomcat+Memcached实现Tomcat集群和session共享】 在现代Web应用程序的部署中,为了提高系统的可用性和可扩展性,通常会采用集群技术。将多个Tomcat服务器组成一个集群,通过负载均衡策略分发用户请求,以...

    tomcat使用memcached集群session共享(转载并修改)

    标题 "Tomcat 使用 Memcached 集群进行 Session 共享" 描述了一种在分布式环境中解决 Web 应用程序 Session 共享问题的技术。在传统的 Web 服务器中,Session 数据通常存储在单个服务器的内存中,这限制了可扩展性。...

    memcached管理session资源

    **正文** Memcached管理Session...总之,使用MSM结合Memcached管理session资源是一种有效的解决方案,能够提升Web应用的性能和可用性。通过合理配置和管理,我们可以构建出一个健壮且高效的分布式session管理系统。

    nginx tomcat集群 session复制

    【Nginx Tomcat集群与Session复制】 在高并发、高可用的Web应用环境中,使用Nginx作为负载均衡器,结合Tomcat集群是常见的架构选择。为了保证用户体验的连续性,Session复制技术用于在多个Tomcat实例之间共享用户...

    tomcat-session-manager环境构建资源

    在压缩包的文件名“tomcat-memcached”中,我们可以推断这个资源是关于Tomcat集成memcached进行Session管理的。Memcached是一个轻量级的内存存储系统,能够快速地存储和检索数据,特别适合用来存储像Session这样的...

    Memcached+tomcat session共享jar 和tomcat xml配置

    标题中提到的"Memcached+tomcat session共享jar",通常是指`memcached-session-manager`这个第三方库,它提供了一个Tomcat的Manager和Store实现,使得Tomcat能够与Memcached进行交互。例如,`mchange-commons-java`...

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...

    集群redis实现session共享jar包之tomcat8

    Tomcat本身支持集群部署,它通过` sticky session `策略来实现session共享。当用户请求到达时,会被定向到某一台特定的服务器,该服务器负责处理该用户的后续请求,确保session的一致性。但这种方法在服务器故障或...

    tomcat-session同步所需jar.rar_session集群共享_tomcat session

    **Tomcat Session管理**:Tomcat提供了多种session管理策略,如`org.apache.catalina.ha.session.DeltaManager`和`org.apache.catalina.ha.session.JvmRouteBinderValve`,它们支持集群环境下的session复制。...

    Tomcat7集群实现共享session,已配置好。

    标题 "Tomcat7集群实现共享session,已配置好" 暗示了这是一个关于在Tomcat7服务器集群环境中实现session共享的配置实例。在多台Tomcat服务器组成的集群中,session共享是解决用户会话在不同服务器之间无缝切换的...

    nginx+tomcat+memcached服务架构实现session共享所需jar包

    "nginx+tomcat+memcached"服务架构是一种常见的解决方案,它利用Nginx作为反向代理和负载均衡器,Tomcat作为Java应用服务器,而Memcached作为分布式缓存系统来实现session共享。以下是对这个架构和相关知识点的详细...

Global site tag (gtag.js) - Google Analytics