我正在评估在tomcat中使用粘性会话和会话复制的情况。根据我的初步评估,我认为如果启用会话复制,则在一个tomcat节点中启动的会话将被复制到所有其他tomcat节点,因此,我们不需要粘性会话即可继续会话,并且任何节点都可以接收该请求。
但是似乎会话复制通常与粘性会话一起使用,否则无论何时将请求发送到其他节点,都需要更改会话ID。参考:http : //tomcat.apache.org/tomcat-6.0-doc/cluster- howto.html#Bind_session_after_crash_to_failover_node
如果必须启用粘性会话,谁能解释会话复制的真正用途是什么?因为那样一来,当具有给定会话ID的请求始终发送到同一节点时,您将不必要在每个节点上复制会话。在节点崩溃的情况下这可能是有益的,但是那样不会经常发生,仅使用会话复制就显得过分了。
我认为唯一真正的好处就是无需过多思考就可以关闭Tomcat实例。尤其是当节点实际上可以频繁地打开和关闭时,这在当今的云世界(例如Amazon AWS Spot实例)中适用。替代方法是购买一个不错的负载平衡器,以支持节点排空。但是体面的负载均衡器很昂贵,排干需要时间。
我可以想到的另一种情况是(实施不佳)购物车,其中商品被保留在其中HttpSession并且关闭将需要用户重新购买它们(这可能会导致销售损失)。
HttpSession
但是在大多数情况下,您是对的-拥有粘性会话和会话复制的好处是微不足道的。