ASP.NET站点的负载共享

时间:2009-09-16 19:21:08

标签: asp.net iis deployment load-balancing

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

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

正如其他人所提到的,您应该可以在负载均衡器上打开Sticky Sessions,这应该为您解决大多数“留在一台服务器上”的问题。

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

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

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

  

Configure MachineKey in ASP.NET 2.0

如果您在IIS 7.5上运行,则会有一些细微差别 - Tess Ferrandez在最近的帖子“Forms authentication fails after installing IIS 7.5”中有更多详细信息。

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