我正在评估在tomcat中使用粘滞会话和会话复制的情况。从我最初的评估来看,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且请求可以被任何节点拾取。
但似乎会话复制通常用于粘性会话,否则,每当请求到达其他节点时,都需要更改会话id。参考:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node
如果您必须启用粘滞会话,谁能解释会话复制的真正用途是什么?因为当具有给定会话id的请求总是发往同一节点时,您将不必要地复制每个节点上的会话。在节点崩溃的情况下,这可能是有益的,但这种情况并不经常发生,仅使用会话复制似乎有点过分。
发布于 2011-06-18 06:04:10
我认为唯一真正的好处是可以不用想太多就可以关闭Tomcat实例。这尤其适用于今天的云世界(比如Amazon AWS spot实例),因为节点可以非常频繁地打开和关闭。另一种选择是购买一个支持节点排出的像样的负载均衡器。但是合适的负载均衡器是昂贵的,并且耗费时间。
我能想到的另一个场景是购物车(实现不佳),商品保存在HttpSession中,关闭将需要用户重新购买它们(这可能会导致销售损失)。
但在大多数情况下,您是对的-同时拥有粘滞会话和会话复制的好处可以忽略不计。
发布于 2012-06-15 14:09:59
正如Mindas之前解释的那样:
当你使用负载均衡时,这意味着你有几个tomcat实例,你需要划分负载。
假设您只有一个用户在使用您的web应用程序,而您有3个tomcat实例。这个用户向你的应用程序发送了几个请求,然后负载均衡器会将其中的一些请求发送到第一个tomcat实例,并将其他一些请求发送到第二个实例,以及其他请求发送到您正在使用的粘性会话而不进行复制的third.
发布于 2012-03-31 03:18:23
只是为了在mod_jk的“所有”基本配置中澄清JBoss 5.X上的配置问题。在workers.properties文件中设置粘滞会话
worker.list=loadbalancer
... nodes configuration omitted
worker.loadbalancer.balance_workers=node1,node2
worker.loadbalancer.sticky_session=True不会阻止会话复制。为了关闭JBoss上的会话复制,我们需要在$JBOSS_HOME\server\YOUR_NODE_NAME\deploy\cluster\jboss-cache-manager.sar\META-INF\jboss-cache-manager-jboss-beans.xml cacheMode参数中将其设置为LOCAL。
通常在粘性会话场景中,我们不希望会话复制,因为我们不希望额外的开销与复制会话所需的大量I/O操作相关联。
事实上,如果使用粘性会话,我们不需要在“所有”配置中运行JBoss,我们可以使用基于“默认”或“标准”的配置。
唯一需要做的就是更改$JBOSS_HOME/server/YOUR_NODE_NAME/deploy/jbossweb.sar/server.xml:
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="YOUR_NODE_NAME">https://stackoverflow.com/questions/6367812
复制相似问题