我想知道粘性和非粘性会话之间的区别。从网上阅读后我明白了:
粘性:只有单个会话对象。
非粘性会话:每个服务器节点的会话对象
答案 0 :(得分:542)
当您的网站仅由一个Web服务器提供服务时,对于每个客户端 - 服务器对,会创建一个会话对象并保留在Web服务器的内存中。来自客户端的所有请求都转到此Web服务器并更新此会话对象。如果某些数据需要在交互期间存储在会话对象中,则它存储在此会话对象中,并且只要会话存在就会保留在那里。
但是,如果您的网站由位于负载均衡器后面的多个Web服务器提供服务,则负载均衡器会决定每个请求所应用的实际(物理)Web服务器。例如,如果负载均衡器后面有3个Web服务器A,B和C,则可能是从服务器A提供www.mywebsite.com/index.jsp,www.mywebsite.com / login.jsp是从服务器B和www.mywebsite.com/accoutdetails.php由服务器C提供。
现在,如果请求是从(物理上)3个不同的服务器提供的,那么每个服务器都为您创建了一个会话对象,并且因为这些会话对象位于三个独立的盒子上,所以没有直接的方法可以知道其中有什么。另一个的会话对象。为了在这些服务器会话之间进行同步,您可能必须将会话数据写入/读取到所有人共有的层 - 例如DB。现在,为这个用例写入数据和从数据库读取数据可能不是一个好主意。现在,这里出现了粘性会话的作用。
如果指示负载均衡器使用粘性会话,则即使存在其他服务器,也会在同一物理服务器上进行所有交互。因此,在与本网站的整个交互过程中,您的会话对象将是相同的。
总而言之,如果是Sticky Sessions,您的所有请求都将被定向到同一个物理Web服务器,而在非粘性负载均衡器的情况下,可以选择任何Web服务器来满足您的请求。
例如,您可以在此处阅读亚马逊的Elastic Load Balancer和粘性会话:http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html
答案 1 :(得分:87)
我在这里提供了一些更详细的答案: https://stackoverflow.com/a/11045462/592477
或者你可以在那里阅读==>
当你使用负载均衡时,它意味着你有几个tomcat实例,你需要分割负载。