现在,我的网站由一台服务器提供服务,但我预计很快就需要增加服务器容量。我希望让多个Web服务器都具有相同的代码库,并使用基于路由器的循环负载共享来将用户分配到每个服务器,而不是在多个服务器之间分割我的网站并且必须跨服务器管理会话。一旦用户点击Web服务器,让他在整个会话期间使用该Web服务器。据我所知,我不需要任何特殊的asp.net代码来促进这一点。

有没有人对此方法有任何警告或评论?

有帮助吗?

解决方案

您所谈论的内容称为粘性会话或会话亲和力。如果您的路由器支持此功能,那么您就是金牌。

唯一的缺点是负载平衡不完美。如果你有一些高负荷的用户都是在同一台服务器上随机出现的,那么他们会在那里进行统计,直到会议结束。

我已经在我工作的地方实现了这种负载平衡,并且它不需要特殊的asp.net代码来实现。

其他提示

大多数(全能型)负载均衡器都能够强制执行“粘性”操作。会话中,同一IP上的用户在每次请求时都被定向到同一个Web服务器。完成此操作无需更改代码。我想到了两个警告:

  1. 使用粘性会话意味着流量负载不会像您没有使用粘性会话那样均匀分布。然而,分布应该是“甚至足够的”。 IMO。
  2. 使用代理服务器的用户中只有很小一部分可能会在不同的请求上使用不同的IP。这些用户可能会遇到“奇怪”的情况。他们被传递到不同的服务器时的行为。

此配置的另一个特征是,如果您的服务器关闭,该服务器上的用户会话也会丢失其会话。我认为这是最常用的设置之一,因为如果路由器支持粘性会话或会话亲和力,它不需要任何开发工作。

正如其他人所提到的,你应该能够在你的负载均衡器上启用Sticky Sessions,这应该可以解决大多数“停留在一台服务器上”的问题。问题。

但是,您需要确保已设置设置以应对登录错误服务器中间会话的用户 - 粘滞会话通常基于IP地址,如果您不幸,用户IP可在会话期间更改,或者服务器可能会脱机,用户将被定向到另一台服务器。

您应该确保您的 MachineKeys 是相同的所有服务器 - 这将确保您可以在所有服务器上正确解密视图状态。

如果您拥有服务器,则可以在machine.config中执行此操作,否则您可以在web.config中的应用程序级别设置它,更多详细信息可以在以下方法中找到:

  

在ASP.NET 2.0中配置MachineKey

如果你在IIS 7.5上运行会有一些细微的差别 - Tess Ferrandez在最近的帖子中有更多细节“安装IIS 7.5后表单身份验证失败”。

您可能想要做的另一件事是移动您的 sessionState 从InProc到Sql或StateServer。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top