我们正在尝试通过防火墙为我们的网站设置负载平衡。我们将有两个Web服务器,即ws1和ws2,它们都运行相同的Web应用程序和进程内会话。
我的问题是,如果有人访问我们的网站并且当前在ws1上有会话,并且防火墙将它们切换到ws2,这将为他们提供ws2上的新会话。我的问题是,如果他们在原来的会话尚未到期时切换回ws1,他们会得到一个新的会话,还是浏览器仍然会有他们的旧会话ID并带回他们的旧会话?
答案 0 :(得分:4)
使用进程内会话时,两台服务器将彼此完全无知。您的用户可能会被切换并丢失会话,然后再切换回来并让他们的旧会话“恢复”。这将为您和您的用户带来悲伤:根据您对会话的依赖程度,事情会随机消失并重新出现。
您需要查看Session State Providers,这样您就可以使用公共存储来存储会话数据。典型的选择是在SQL Server中存储会话,因为您可能已经在两个服务器之间共享该会话。如果您不使用SQL Server,则可能需要为数据库编写自己的提供程序或查找由第三方创建的提供程序。 (这里的悖论是,现在你的SQL Server需要负载平衡/高可用性,现在你刚刚转移了问题。)
如果这不是一个选项,您的防火墙可能支持“会话关联”或“粘性会话”,它将使用某种状态检查来跟踪会话并确保一旦会话启动,来自该会话的流量就会被定向只有一台服务器。然而,这被认为是一种kludge,不应该依赖它。