ASP.Net - 在负载平衡环境中处理会话数据?
ASP.Net如何处理负载平衡环境中的会话数据? 假设用户在浏览几页时发出多个请求? 是否所有请求都转到负载均衡器中的相同服务器?ASP.Net - 在负载平衡环境中处理会话数据?
如果他们不都指向同一台服务器,我该怎么办?我如何处理会话数据?
一般来说,大多数负载均衡器都试图建立持久连接,但出于您的目的,您无法保证这一点。您最好使用诸如SQL后端之类的东西来维护状态或创建一个单独的类来管理会话数据。无论哪种情况,您都可以重新构建会话数据,如果它恰好为空,那么您预期会发生这种情况。我倾向于使用getters来检查null并在必要时重建。在实践中,我没有做任何指标来看看它被重建的频率,但我猜并不是很频繁。就像他们所说的那样,宁可安全也不要抱歉。
负载平衡器通常可以配置一些基础设施的人称为sticky session
或sticky bit
。在这种类型的环境中,一旦请求被分配给服务器,它在整个会话期间与该服务器保持一致。
当Load Balancers没有以这种方式配置时,ASP.NET提供了多个会话状态提供程序。一个非常流行的是SQL Server State Provider,它允许会话信息存储在数据库中。为了使其工作,放置在Session对象中的所有对象都必须是Serializable,以便它们可以存储在一个表中。
正如我所说,还有更多的选择;例如,有些人更喜欢使用不同的方法,如memcached或类似的产品。
您可以从Windows或其他产品(例如BIG-IP F5,HA代理)使用NLB,这里有很多选项。
使用Out-of-Proc(状态服务器)并确保您的机器密钥设置在所有服务器上都相同。还要确保您在共享磁盘驱动器(如NAS)上执行IO操作。
以下是一些链接,提供更多提示: Load Balancing and ASP.NET