`

Tomcat集群session管理解决方案

 
阅读更多
本文原文连接: 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的一部分经过压缩和加密后存放在用户的本地浏览器上!

参考:http://blog.csdn.net/bluishglc/article/details/7641714
分享到:
评论

相关推荐

    tomcat集群session共享解决方案

    本篇文章将深入探讨Tomcat集群中session共享的解决方案,以及相关的应用知识。 1. **Session复制**:这是最基础的session共享方法。通过配置Tomcat的`cluster`模块,可以设置session复制策略。每当一个session在...

    tomcat集群session共享

    综上所述,实现Tomcat集群session共享主要涉及Tomcat的session管理机制、Redis的集成以及相应的配置和优化。通过合理配置,可以确保在高并发环境下提供无缝的用户体验,同时提升系统的可扩展性和可靠性。

    Tomcat集群Session丢失解决方案

    NULL 博文链接:https://sch.iteye.com/blog/1278470

    tomcat7集群session共享memcache依赖包1.8.3

    "tomcat7集群session共享memcache依赖包1.8.3"这个标题正揭示了这样一个解决方案。 首先,让我们深入了解Tomcat7集群。Tomcat7是Apache Tomcat服务器的一个版本,它支持Servlet 3.0和JSP 2.2规范。通过复制应用和...

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

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

    tomcat8集群session共享(redis处理)

    在构建高可用的Web服务时,Tomcat集群是常见的选择,但随之...需要注意的是,虽然Redis是常用的解决方案,但也有其他方式,如Memcached、 Hazelcast 或者基于Cookie的解决方案,具体选择应根据项目需求和技术栈来决定。

    Tomcat集群Session共享

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

    tomcat集群session共享jar(三个)

    总的来说,实现Tomcat集群session共享是提高系统可用性和一致性的重要手段,而基于Redis的解决方案因其高效、灵活而被广泛采用。正确配置和使用`tomcat-redis-session-manager`可以帮助开发者构建稳定、高效的分布式...

    tomcat-redis-session-tomcat tomcat集成redis实现tomcat集群session共享jar包

    描述中提到的“tomcat无缝集成redis实现tomcat集群session管理”,进一步强调了该解决方案的简易性和效率。通过将Redis集成到Tomcat中,可以有效地管理session,避免了传统session复制可能导致的问题,如数据不一致...

    Tomcat集群——使用MSM管理集群Session

    【标题】:“Tomcat集群——使用MSM管理集群Session” 在分布式系统中,尤其是在基于Java的Web应用中,实现session的共享是确保用户状态在不同服务器之间无缝切换的关键。Tomcat,作为流行的开源Servlet容器,提供...

    Tomcat集群Session的Redis共享存储

    在IT行业中,尤其是在Web服务器和应用服务器的管理与优化中,Tomcat集群和Session管理是两个重要的主题。这里我们关注的是如何在Tomcat集群中利用Redis实现Session的共享存储,以此提高系统的可扩展性和可用性。 ...

    tomcat redis session.rar

    综上所述,"Tomcat Redis Session"是一种在分布式环境中保证用户会话一致性的解决方案,通过集成Redis和Nginx,有效地解决了Web应用集群中的Session管理难题。在实际部署中,还需要考虑系统整体架构、性能优化和运维...

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

    标题中的"Tomcat集群Session共享所有文件.zip"表明这是一个关于如何在三台服务器的Tomcat集群中实现Session共享的教程和代码集合。 Session共享的目的是确保用户在集群中的任何一台服务器上操作时,其状态都能被...

    tomcat7集群实现session共享

    4. **基于缓存的解决方案**,如**Memcached**或**Redis**:这些分布式缓存系统可以存储session,为所有Tomcat实例提供中心化的session存储。它们通常具有高性能和可扩展性,但需要额外的配置和维护。 在实施session...

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

    虽然这降低了性能,但它提供了一种跨服务器的解决方案,且易于管理和备份。 3. **分布式缓存(如Redis或Memcached)**:使用分布式缓存系统作为Session存储。这种方法具有高性能和可扩展性,但需要额外的硬件或...

    linux下用memcache做tomcat集群session复制

    在Linux环境下,使用Memcached实现Tomcat集群的session复制是一个常见的解决方案,以提高应用的可扩展性和高可用性。Memcached是一种分布式内存对象缓存系统,它可以存储包括session在内的临时数据,使得多个服务器...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    这个解决方案的优势在于,当你的Web应用部署在多台Tomcat服务器上时,每台服务器都能访问到同一份Session数据,从而实现了Session的跨服务器共享。此外,Redis的高并发性能和持久化能力也能保障在高负载下的服务稳定...

    tomcat8+redis集群 session共享jar

    总结来说,这个"tomcat8+redis集群 session共享jar"的组合提供了一种高效且可扩展的session管理解决方案。它利用了Tomcat 8的灵活性、Redis的高速缓存能力以及Java的便捷性,使得在分布式环境中处理session变得更加...

Global site tag (gtag.js) - Google Analytics