Tomcat 5服务器为集群和SESSION复制提供了集成的支持。本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的内在工作机制一个概要认识。我将会讨论SESSION复制在TOMCAT5中是怎样进行的以及跨越多集群节点的SESSION持久性的复制机制。在第2部分,我会详细讨论一个带有SESSION复制功能的TOMCAT集群的安装例子,并且比较不同的复制情形。
集群
传统独立服务器(非集群的)不提供任何失效无缝转移以及负载平衡能力。当服务器失败的时候,就无法获取整个网站的内容,除非服务器被重新唤起。由于服务器失效,任何存储在服务器内存中的SESSION都会丢失,用户必须重新登陆并且输入所有由于服务器失效丢失的数据。
不同的是,作为集群一部分的服务器则提供了可测性以及失效无缝转移能力。一个集群就是一组同步运行并且协同工作,能提供高可靠性,高稳定性以及高可测性的多服务器例程。服务端集群对客户端表现出来似乎就是一个单独的服务器例程。从客户端的视角来看,集群的客户端和单独的服务器没多大不同,但是他们通过提供实效无缝转移和SESSION复制做到了不间断服务以及SESSION数据持久性。
集群中的服务器通讯
集群中的应用程序服务器通过诸如IP多点传送(IP multicast)和IP sockets这样的技术和其他服务器共享信息
●IP多点传送:主要用于1对多的服务器通讯,通过广播服务和 heartbeats消息的可用来显示服务器的有效
●IP sockets:主要用于在集群的服务器例程中进行P2P服务器通讯
使用IP多点传送进行一对多通讯
TOMCAT服务器使用IP多点传送在集群中的服务器例程间进行一对多的通讯,IP多点传送是一种能够让多服务器向指定IP地址和端口号进行订阅并且监听消息的广播技术(多点传送IP地址范围从224.0.0.0 到239.255.255.255)。在集群中的每个服务器都使用多点传送广播特定的 heartbeat消息,通过监视这些 heartbeat消息,在集群中的服务器例程判断什么时候服务器例程失效。在服务器通讯中使用IP多点传送的一个缺点是他不能保证这些消息被确实接收到了。例如,一个应用持续的本地多点传送缓存满了,就不能写入新的多点传送消息,等消息过了之后该应用程序就没有被通知到。
使用IP Sockets进行服务器通讯
IP sockets 同样也通过了一套在集群中的服务器间进行发送消息和数据的机制。服务器例程使用IP sockets 在集群节点间进行HTTP SESSION状态的复制。正确的SOKET配制对于集群的性能是至关重要的,基于SOCKET的通讯的效率取决于SOCKET的实现类别(例如:系统使用本地的或者纯JAVA SOCKET读取器实现),如果服务器使用纯JAVA SOCKET读取器则要看服务器例程是否注册使用了足够的SOCKET读取器线程。
如果想要有最佳的SOCKET性能,系统应该注册使用本地的SOCEKT而不是纯JAVA实现。这是因为相对于基于JAVA的SOCKET实现,本地SOCKET消耗更少的系统资源。虽然SOCKET读取器的JAVA实现是P2P通信中一种可靠而且可移动的方法,可是他不能为集群中的重型SOCKET使用提供最好的性能。当判断从SOCKET是否有数据读取的时候本地SOCKET读取器使用了更有效率的方法。使用本地SOCKET读取器实现,读取器线程不需要去统计静止的SOCKET:他们仅仅为活动的SOCKET服务,并且在一个给定的SOCKET开始活跃起来时他们可以立刻捕捉到。而使用纯JAVA SOCKET读取器,线程必须动态的统计所有打开的SOCKET,判断他们是否包含可读取的数据。换句话说,SOCKET读取器总是忙于统计SOCKET,即使这些SOCKET没有数据可读。这些本不应该的系统开销降低了性能。
TOMCAT 5中的集群
虽然在TOMCAT5的早些版本中也有集群的功能,但是在稍后的版本中(5。0。19或者更高),集群变的更加模块组件化。在 server.xml 中集群元素已经被重构,这样我们可以替换集群的不同部分而不会影响其他元素。例如,当前配置中把成员服务设置为多点传送发现。这里可以轻易地把成员服务修改替换为使用TCP或者 Unicast ,而不会改变集类逻辑的其他部分。
其他一些集群元素,例如SESSION管理器,复制发送端,复制接受端也可以被自定义的实现取代而不影响集群配置的其他部分。同样,在TOMCAT集群中的任何服务器组件可以使用集类API向集群中的所有成员发送消息。
SESSION复制
服务器集群通常操纵两种SESSION: sticky sessions和 replicated sessions 。sticky sessions就是存在单机服务器中的接受网络请求的SESSION,其他集群成员对该服务器的SESSION状态完全不清楚,如果存有SESSION的服务器失败的话,用户必须再次登陆网站,重新输入所有存储在SESSION中的数据。
另一种SESSION类型是,在一台服务器中SESSION状态被复制到集群中的其他所有服务器上,无论何时,只要SESSION 被改变,SESSION数据都要重新被复制。这就是 replicated session 。 sticky 和 replicated sessions都有他们的优缺点, Sticky sessions简单而又容易操作,因为我们不必复制任何SESSION数据到其他服务器上。这样就会减少系统消耗,提高性能。但是如果服务器失败,所有存储在该服务器内存中的SESSION数据也同样会消失。如果SESSION数据没有被复制到其他服务器,这些SESSION就完全丢失了。当我们在进行一个查询事务当中的时候,丢失所有已经输入的数据,就会导致很多问题。
为了支持 JSP HTTP session 状态的自动失效无缝转移,TOMCAT服务器复制了在内存中的SESSION状态。这是通过复制存储在一台服务器上的SESSION数据到集群中其他成员上防止数据丢失以及允许失效无缝转移。
对象的状态管理
通过在服务器上的保存状态可以区分出4种对象:
●无状态:一个无状态对象在调用的时候不会在内存中保存任何状态,因为客户端和服务器端没必要保存任何有关对方的信息。在这种情况下,客户端会在每次请求服务器时都会发送数据给服务器。SESSION状态被在客户端和服务器端来回发送。这种方法不总是可行和理想的,特别是当传输的数据比较大或者一些安全信息我们不想保存在客户端的时候;
●会话:一个会话对象在一个SESSION中只被用于特定的某个客户端。在SESSION中,他可以为所有来自该客户端的请求服务,并且仅仅是这个客户端的请求。贯穿一个SESSION,两个请求间的状态信息必须保存。会话服务通常在内存中保存短暂的状态,当在服务器失败的时候可能会丢失。SESSION状态通常被保存在请求间的服务器的内存中。为了清空内存,SESSION状态也可以被从内存中释放(就像在一个对象CACHE)。在该对象中,性能和可量测性都有待提高,因为更新并不是被单独的写到磁盘上,并且服务器失败的时候数据也没办法抢救。
●缓存:缓存对象在内存中保存状态,并且使用这个去处理从多客户端来的请求。缓存服务的实现可以扩展到他们把缓存的是数据备份保存在后端存储器中(通常是一个关系数据库)。
●独立的:一个独立的对象在一个时间内只活跃在集群中的一台服务器上,处理来自多客户端的请求。他通常由那些私有的,持久的,在内存中缓寸的数据支持。他同样也在内存中保持短暂状态,在服务器失败的时候要重建或者丢失。当失败的时候,独立对象必须在同一个服务器上重起或者移植到另一台服务器上。
(来源: "Using WebLogic Server Clusters")
SESSION复制的设计考虑事项
网络考虑事项
把集群的多点传送地址和其他应用程序隔离是至关重要的。我们不希望集群配置或者网络布局干扰到多点传送服务器通信。和其他应用程序共享集群多点传送地址将迫使集群的服务器例程处理不应该的消息,消耗系统内存。共享多点传送地址可能也会使IP多点传送缓冲过载,延迟服务器 heartbeat 消息传输。这样的延迟可能导致一个服务器例程被标识为死亡,仅仅因为他的 heartbeat 消息没有被及时接收。
编程考虑事项
除了上面提到的网络相关因素,还有些和我们写 J2EE 网络应用程序有关的设计考虑也会影响SESSION复制。以下列出了一些编程方面的考虑:
●SESSION数据必须被序列化:为了支持HTTP session 状态的内存内复制,所有的 servlet 和 JSP session 数据必须被序列化,对象中的每个域都必须被序列化,这样对象被可靠的序列化。
●把应用程序设计为幂等的:幂等的的意思就是一个操做不会修改状态信息,并且每次操作的时候都返回同样的结果(换句话说就是:做多次和做一次的效果是一样的),通常,WEB请求,特别是 HTML forms 都被发送多次(当用户点击发送按纽两次,重载页面多次),导致多次HTTP请求。设计SERVLET和其他WEB对象为 幂等的,可以容忍多次请求。详细可以去参考设计模式“Synchronized Token ”和“Idempotent Receiver ”关于怎样设计幂等的的应用程序。
●在BUSINESS层存储状态:会话状态应该使用有状态的SESSION BEANS存储在EJB层,而不是存储在WEB层的HttpSession。因为企业应用程序要支持各种类型客户端(WEB客户端,JAVA应用程序,其他EJB),存储数据在WEB层会导致在客户端的双数据存储。因此,有状态的SESSION BEAN在这些情况下就被用于存储SESSION状态。无状态的SESSION BEAN要为每次的调用重构造会话状态。这些状态可能必须从数据库中恢复的数据中重编译。这些缺点失去了使用无状态SESSION BEAN去提高性能和可测量性的目的,严重的减低了性能。
●序列化系统消耗:序列化SESSION数据在复制SESSION状态的时候回会些系统消耗。随着序列化对象大小的增长消耗也越多。最好是保持SE
分享到:
相关推荐
在IT领域,特别是Web应用服务器的管理与优化中,Tomcat集群实现Session复制是一个关键的技术点,它确保了高可用性和负载均衡,特别是在处理大量并发请求的场景下。本文将深入探讨这一主题,涵盖其原理、配置方法以及...
在Tomcat5集群中,Session复制是一个非常重要的概念。Session复制是指在多个服务器节点之间复制和同步Session数据,以确保在服务器故障或重启时,Session数据不丢失。这种机制可以提供高可靠性、可扩展性和高性能的...
一直以来,我误解认为启动了n个tomcat,则Session需要同步复制到n个Tomcat中存在,因此在启动了6个以上的Tomcat,性能会大大下降。 而实际情况下,采取Apache 加Tomcat进行负载均衡集群的时候,是可以不用将Session...
【标题】:Tomcat5集群中的SESSION复制详解 【描述】:本文将深入探讨Tomcat5在集群环境下的SESSION复制机制,以及如何确保SESSION的持久性和集群中的无缝切换。 【标签】:Tomcat5,复制,集群,SESSION 在...
在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...
NULL 博文链接:https://xueweiabcok.iteye.com/blog/1841448
总结来说,实现Tomcat7集群的session共享是一项关键任务,涉及到多个服务器间的协调和数据同步,以保证用户在集群环境中的会话体验连续无断。正确配置和选择合适的session共享策略是提升应用可用性和性能的重要步骤...
在IT行业中,尤其是在Web...总的来说,利用Redis进行Tomcat集群Session共享是一种高效且灵活的方法,能够提高系统的可用性和用户体验。通过深入理解这一技术,开发者可以更好地构建和维护大规模分布式Web应用程序。
在分布式系统中,Tomcat集群是一种常见的架构模式,用于提高应用程序的可用性和可扩展性。然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接...
在构建高可用的Web服务时,Tomcat集群是常见的选择,但随之而来的一个问题就是如何在集群中的各个节点间共享Session。"Tomcat8集群session共享(redis处理)"的主题正是针对这一问题,通过集成Redis作为分布式缓存来...
通过复制应用和配置,可以创建一个Tomcat集群,这样当一台服务器出现故障时,其他服务器能够接管其工作,保证服务的连续性。然而,由于每个Tomcat实例都有自己的内存空间,所以默认情况下,每个服务器会独立维护用户...
tomcat8 Redis集群 同步Session 中用到的jar 附带tomcat content.xml配置文件
Tomcat5 提供了集群(Cluster)功能来实现 Session 的复制,确保用户在不同服务器间的会话状态能够无缝切换。以下是关于 Tomcat5 Session 复制的详细说明: 1. **配置集群组件** 在 `conf/server.xml` 文件中,你...
这就是“Tomcat集群session共享”的核心需求。本篇将详细介绍如何在Tomcat7中实现基于Redis的Session共享,并涉及相关的jar包。 首先,让我们了解为何需要session共享。在单个Tomcat服务器中,Session信息存储在...
本文将详细介绍如何在Windows环境下,利用Nginx作为反向代理服务器,与Tomcat集群配合实现负载均衡,并进行session复制,确保用户会话在不同服务器之间的一致性。 首先,Nginx是一款轻量级、高性能的HTTP和反向代理...
本篇文章将详细探讨如何在Redis+Tomcat集群配置中实现Session共享。 首先,我们需要理解什么是Session。Session是Web应用中用于存储用户状态的一种机制,通常用于保存用户的登录信息、购物车等数据。在单台服务器...
总之,通过合理配置Tomcat集群和使用Redis作为session存储,我们可以实现跨服务器的session共享,确保用户在多台服务器间的会话一致性。这个压缩包提供了一个预配置的解决方案,对于快速搭建和测试session共享环境...
Nginx Tomcat 集群的Session 复制,解决了,集群情况下的session复制问题。
本篇将深入探讨Apache如何实现负载均衡,以及Tomcat集群和session复制的相关知识。 首先,Apache的负载均衡主要通过模块mod_proxy来实现。这个模块能够将客户端的HTTP请求转发到不同的后端服务器,从而达到负载均衡...
以下是实现Tomcat集群session共享与Redis结合的步骤和知识点: 1. **配置Redis服务器**:首先,你需要安装并运行一个Redis实例。确保其稳定运行,并且能够被集群中的所有Tomcat服务器访问。 2. **选择session复制...