Answers:
当您的网站仅由一个Web服务器提供服务时,对于每个客户端-服务器对,都会创建一个会话对象并将其保留在Web服务器的内存中。来自客户端的所有请求都将转到此Web服务器并更新此会话对象。如果在交互作用期间需要将某些数据存储在会话对象中,则将其存储在此会话对象中,并在存在会话的任何时间都保持在那里。
但是,如果您的网站由位于负载均衡器后面的多个Web服务器提供服务,则负载均衡器将决定每个请求应访问的实际(物理)Web服务器。例如,如果负载均衡器后面有3个Web服务器A,B和C,则可能从服务器A提供www.mywebsite.com/index.jsp,而从服务器A提供www.mywebsite.com/login.jsp服务器B和服务器B的网址为www.mywebsite.com/accoutdetails.php。
现在,如果(实际上)从3个不同的服务器提供请求,则每个服务器都为您创建了一个会话对象,并且由于这些会话对象位于三个独立的盒子上,因此无法直接知道会话对象中的内容其他的。为了在这些服务器会话之间进行同步,您可能必须将会话数据写入/读取到所有人都通用的层中(例如DB)。现在,对于这种用例,将数据写入数据库或从数据库读取数据可能不是一个好主意。现在,粘性会话的作用到了。
如果指示负载平衡器使用粘性会话,则即使存在其他服务器,所有交互也会在同一物理服务器上发生。因此,在与该网站的整个交互过程中,您的会话对象将是相同的。
总而言之,在“粘性会话”的情况下,所有请求都将定向到同一台物理Web服务器,而在非粘性负载均衡器的情况下,可以选择任何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实例,并且需要划分负载。