ASP.Net - 在负载平衡环境中处理会话数据?

时间:2011-09-28 02:27:27

标签: asp.net session load-balancing

ASP.Net如何在负载均衡的环境中处理会话数据? 假设用户在浏览几页时会发出多个请求? 是否所有请求都转到负载均衡器中的同一台服务器上?

如果他们并非都指向同一台服务器,我该怎么办?我该如何处理会话数据?

4 个答案:

答案 0 :(得分:4)

您需要确保您的NLB能够启用“粘性”会话。

如果这不是一个选项,那么您需要查看使用ASP.Net Session Modes配置会话服务器或某些后备存储,如SQL Server。

答案 1 :(得分:1)

通常,大多数负载均衡器会尝试持久连接,但出于您的目的,您无法保证这一点。您最好使用类似SQL后端的东西来维护状态或创建一个单独的类来管理会话数据。在任何一种情况下,您都可以重建会话数据,如果它恰好是您想要的其他时间。我倾向于使用getter来检查null并在必要时重建。在实践中,我没有做任何指标,看看它重建的频率,但我猜不常。正如他们所说,最好是安全而不是抱歉。

答案 2 :(得分:1)

负载均衡器通常可以配置基础设施人员称之为sticky sessionsticky bit的内容。在这种类型的环境中,一旦将请求分配给服务器;它在整个会话期间都与该服务器保持一致。

如果未以这种方式配置Load Balancers,ASP.NET会提供多个会话状态提供程序。一个非常流行的是SQL Server State Provider,它允许会话信息存储在数据库中。为了使其工作,放置在Session对象中的所有对象必须是Serializable,以便它们可以存储在表中。

正如我所说,还有其他几种选择;例如,有些人更喜欢使用不同的方法,例如memcached或类似产品。

答案 3 :(得分:1)

您可以使用Windows中的NLB或其他产品,例如BIG-IP F5,HA代理,有很多选项。

使用Out-of-Proc(状态服务器)并确保所有服务器上的machinekey设置相同。还要确保在共享磁盘驱动器(如NAS)上执行IO。

以下链接提供了一些提示: Load Balancing and ASP.NET