现在,我的网站由一台服务器提供服务,但我预计很快就需要增加服务器容量。我希望让多个Web服务器都具有相同的代码库,并使用基于路由器的循环负载共享来将用户分配到每个服务器,而不是在多个服务器之间分割我的网站并且必须跨服务器管理会话。一旦用户点击Web服务器,让他在整个会话期间使用该Web服务器。据我所知,我不需要任何特殊的asp.net代码来促进这一点。
有没有人对此方法有任何警告或评论?
答案 0 :(得分:1)
您所谈论的内容称为粘性会话或会话亲和力。如果您的路由器支持此功能,那么您就是金牌。
唯一的缺点是负载平衡不完美。如果你有一些高负荷的用户都是在同一台服务器上随机出现的,那么他们会在那里进行统计,直到会议结束。
我已经在我工作的地方实现了这种负载平衡,并且它不需要特殊的asp.net代码来实现。
答案 1 :(得分:1)
大多数(perhap all)负载均衡器都能够强制执行“粘性”会话,其中同一IP上的用户在每次请求时都被定向到同一个Web服务器。完成此操作无需更改代码。我想到了两个警告:
答案 2 :(得分:1)
此配置的另一个特征是,如果您的服务器关闭,该服务器上的用户会话也会丢失其会话。我认为这是最常用的设置之一,因为如果路由器支持粘性会话或会话亲和力,它不需要任何开发工作。
答案 3 :(得分:1)
正如其他人所提到的,您应该可以在负载均衡器上打开Sticky Sessions,这应该为您解决大多数“留在一台服务器上”的问题。
但是,您需要确保已设置设置以应对登录错误服务器中间会话的用户 - 粘滞会话通常基于IP地址,如果您不幸,用户IP可在会话期间更改,或者服务器可能会脱机,用户将被定向到另一台服务器。
您应该确保所有服务器上的MachineKeys都相同 - 这样可以确保您可以在所有服务器上正确解密视图状态。
如果您拥有服务器,则可以在machine.config中执行此操作,否则您可以在web.config中的应用程序级别设置它,更多详细信息可以在以下方法中找到:
如果您在IIS 7.5上运行,则会有一些细微差别 - Tess Ferrandez在最近的帖子“Forms authentication fails after installing IIS 7.5”中有更多详细信息。
您可能想要做的另一件事是将您的sessionState从InProc移动到Sql或StateServer。