【发布时间】:2012-05-16 16:33:26
【问题描述】:
我想知道粘性会话和非粘性会话之间的区别。我从网上阅读后的理解:
粘性:只有一个会话对象会在那里。
非粘性会话:每个服务器节点的会话对象
【问题讨论】:
我想知道粘性会话和非粘性会话之间的区别。我从网上阅读后的理解:
粘性:只有一个会话对象会在那里。
非粘性会话:每个服务器节点的会话对象
【问题讨论】:
当您的网站仅由一个 Web 服务器提供服务时,对于每个客户端-服务器对,会创建一个会话对象并保留在 Web 服务器的内存中。来自客户端的所有请求都转到此 Web 服务器并更新此会话对象。如果在交互期间需要将一些数据存储在会话对象中,则将其存储在此会话对象中,并在会话存在时一直保留。
但是,如果您的网站由位于负载均衡器后面的多个 Web 服务器提供服务,则负载均衡器会决定每个请求应该发送到哪个实际(物理)Web 服务器。例如,如果负载均衡器后面有 3 个 Web 服务器 A、B 和 C,则可能www.mywebsite.com 来自服务器 A,www.mywebsite.com 来自服务器 B,www.mywebsite.com/ 可能来自服务器 C .
现在,如果请求是从(物理上)3 个不同的服务器提供的,每个服务器都会为您创建一个会话对象,并且因为这些会话对象位于三个独立的盒子上,所以没有直接的方法可以知道其中有什么另一个的会话对象。为了在这些服务器会话之间进行同步,您可能必须将会话数据写入/读取到所有人通用的层中 - 例如数据库。现在,为此用例向数据库写入数据和从数据库读取数据可能不是一个好主意。现在,sticky-session的角色来了。
如果指示负载平衡器使用粘性会话,那么您的所有交互都将在同一物理服务器上进行,即使存在其他服务器也是如此。因此,在您与本网站的整个交互过程中,您的会话对象将是相同的。
总而言之,在粘性会话的情况下,您的所有请求都将被定向到同一个物理 Web 服务器,而在非粘性负载均衡器的情况下,可以选择任何网络服务器来处理您的请求。
例如,您可以在此处阅读有关 Amazon 的 Elastic Load Balancer 和粘性会话的信息:http://aws.typepad.com/aws/2010/04/new-elastic-load-balancing-feature-sticky-sessions.html
【讨论】:
我在这里做了一些更详细的回答: https://stackoverflow.com/a/11045462/592477
或者你可以在那里阅读 ==>
当您使用负载平衡时,这意味着您有多个 tomcat 实例,您需要分配负载。
【讨论】: