2011-09-28 92 views
8

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

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

回答

4

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

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

1

一般来说,大多数负载均衡器都试图建立持久连接,但出于您的目的,您无法保证这一点。您最好使用诸如SQL后端之类的东西来维护状态或创建一个单独的类来管理会话数据。无论哪种情况,您都可以重新构建会话数据,如果它恰好为空,那么您预期会发生这种情况。我倾向于使用getters来检查null并在必要时重建。在实践中,我没有做任何指标来看看它被重建的频率,但我猜并不是很频繁。就像他们所说的那样,宁可安全也不要抱歉。

1

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

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

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

1

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

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

以下是一些链接,提供更多提示: Load Balancing and ASP.NET