首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >粘滞会话和会话复制

粘滞会话和会话复制
EN

Stack Overflow用户
提问于 2011-06-16 14:14:29
回答 3查看 38.9K关注 0票数 30

我正在评估在tomcat中使用粘滞会话和会话复制的情况。从我最初的评估来看,我认为如果我们启用会话复制,那么在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此我们不需要粘性会话来继续会话,并且请求可以被任何节点拾取。

但似乎会话复制通常用于粘性会话,否则,每当请求到达其他节点时,都需要更改会话id。参考:http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html#Bind_session_after_crash_to_failover_node

如果您必须启用粘滞会话,谁能解释会话复制的真正用途是什么?因为当具有给定会话id的请求总是发往同一节点时,您将不必要地复制每个节点上的会话。在节点崩溃的情况下,这可能是有益的,但这种情况并不经常发生,仅使用会话复制似乎有点过分。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-18 06:04:10

我认为唯一真正的好处是可以不用想太多就可以关闭Tomcat实例。这尤其适用于今天的云世界(比如Amazon AWS spot实例),因为节点可以非常频繁地打开和关闭。另一种选择是购买一个支持节点排出的像样的负载均衡器。但是合适的负载均衡器是昂贵的,并且耗费时间。

我能想到的另一个场景是购物车(实现不佳),商品保存在HttpSession中,关闭将需要用户重新购买它们(这可能会导致销售损失)。

但在大多数情况下,您是对的-同时拥有粘滞会话和会话复制的好处可以忽略不计。

票数 10
EN

Stack Overflow用户

发布于 2012-06-15 14:09:59

正如Mindas之前解释的那样:

当你使用负载均衡时,这意味着你有几个tomcat实例,你需要划分负载。

假设您只有一个用户在使用您的web应用程序,而您有3个tomcat实例。这个用户向你的应用程序发送了几个请求,然后负载均衡器会将其中的一些请求发送到第一个tomcat实例,并将其他一些请求发送到第二个实例,以及其他请求发送到您正在使用的粘性会话而不进行复制的third.

  • If :假设您只有一个用户使用您的web应用程序,而您有3个tomcat实例。此用户向您的应用程序发送多个请求,然后负载均衡器将第一个用户请求发送到三个tomcat实例中的一个,而此用户在其会话期间发送的所有其他请求将发送到同一tomcat实例。在这些请求期间,如果您关闭或重新启动此tomcat实例(使用的tomcat实例),负载均衡器会将剩余的请求发送到另一个仍在运行的tomcat实例,但由于您不使用会话复制,接收剩余请求的实例tomcat没有用户会话的副本,因此对于此tomcat,用户开始了一个会话:用户松开了他的会话,并与web应用程序断开连接,尽管web应用程序仍在使用粘滞会话:假设您只有一个用户在使用您的web应用程序,而您有3个tomcat实例。此用户向您的应用程序发送多个请求,然后负载均衡器将第一个用户请求发送到三个tomcat实例中的一个,而此用户在其会话期间发送的所有其他请求将发送到同一tomcat实例。在这些请求期间,如果您关闭或重新启动此tomcat实例(使用的tomcat实例),负载均衡器会将剩余请求发送到另一个仍在运行的tomcat实例。当您使用会话复制时,接收剩余请求的实例tomcat具有用户会话的副本,则用户将继续其会话:用户继续浏览您的web应用程序而不会断开连接,关闭tomcat实例不会影响用户导航。
票数 82
EN

Stack Overflow用户

发布于 2012-03-31 03:18:23

只是为了在mod_jk的“所有”基本配置中澄清JBoss 5.X上的配置问题。在workers.properties文件中设置粘滞会话

代码语言:javascript
复制
 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:

代码语言:javascript
复制
<Engine name="jboss.web" defaultHost="localhost" jvmRoute="YOUR_NODE_NAME">
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6367812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档