扩展ASP.NET会话状态服务器

时间:2009-01-28 18:28:12

标签: asp.net session-state load-balancing

情景:

该网站托管在三台服务器上,每台服务器都使用IIS

使用Windows Server 2003附带的网络负载平衡软件对所有三台服务器进行群集。

所有三个站点都配置为将会话状态存储在已指定为“状态服务器”的单独服务器上。

我被要求扩大“状态服务器”。有没有办法让我可以拥有多个状态服务器并在它们之间同步状态,所以如果其中一个状态服务器发生故障,其他状态服务器将能够提供状态信息?

5 个答案:

答案 0 :(得分:8)

我们在工作的地方使用Scale Out State Server,它完美地完成了工作并且设置起来很简单。据我所知,微软也正在研究一种名为Velocity的类似产品,但我对此没有任何经验。

SOSS唯一的缺点就是你需要为此付出代价 - 但我除了与销售和支持团队互动的丰富经验之外什么都没有。如果您最终获得许可,请帮我一个忙,让他们知道Gratis的Daniel发给您了;)

答案 1 :(得分:6)

我会去memcached。您可以在每个Web服务器上进行设置,然后可以使用添加的每个新Web服务器对其进行扩展。我之前在codeplex上找到了几个客户端。

答案 2 :(得分:3)

您正在寻找分布式缓存技术。 Microsoft Velocity是一个由Microsoft发布的示例,用于将Velocity替换为默认的ASP.NET会话状态,可以将其分发。还有其他缓存提供程序,如Memcache。

编辑:针对与当前时间更相关的信息更新此答案,此类功能内置于带有AppFabric产品的Windows Azure中。关于此的一些简要信息可以在这里看到:Windows Server and Azure AppFabric virtual launch May 20th

答案 3 :(得分:0)

SQL服务器上的会话数据库可以通过少量代码轻松扩展。配置更改。您可以将asp.net会话粘贴到会话数据库,无论您的服务器场中的哪个Web服务器提供请求,基于会话ID的sql状态服务器映射都可以完美运行。这可能是使用SQL Server扩展ASP.NET会话状态的最佳方法之一。有关更多信息,请阅读链接

True Scaleout model for session state

答案 4 :(得分:0)

您能做的最好的事情就是完全避免使用状态服务器。

真正扩展会话状态的唯一方法是避免完全依赖于会话存储后端(in-proc,sql,mongo或其他)。

如果会话数据足够小(通常在大多数应用程序中)适合请求的标头,则应将其保留在cookie(签名!)内,并随请求本身来回移动。没有单点故障,没有扩展问题,无需调整内存大小或cpu要求。

JWT是可用于此目的的已知标准,本文在此指向基于JWT的ASP.Net会话状态提供程序:

http://www.drupalonwindows.com/en/content/aspnet-session-state-scaling-and-performance-issues