5

设想:

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

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

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

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

4

5 回答 5

7

我们在我工作的地方使用Scale Out State Server,它的工作非常出色,而且设置起来非常简单。我了解 Microsoft 也在开发名为Velocity的类似产品,但我对此没有任何经验。

SOSS 唯一的缺点是您必须为此付费——但我除了与他们的销售和支持团队互动之外,什么都没有。如果你最终获得了许可,请帮我一个忙,让他们知道来自 Gratis 的 Daniel 派你来的;)

于 2009-01-28T18:30:48.990 回答
6

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

于 2009-01-28T18:37:58.990 回答
3

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

编辑:更新此答案以获取与当前时间更相关的信息,这种类型的功能内置于 Windows Azure 和 AppFabric 产品中。可以在此处查看有关此的一些简要信息:Windows Server 和 Azure AppFabric 虚拟发布 5 月 20 日

于 2009-01-28T18:32:52.777 回答
0

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

会话状态的真正横向扩展模型

于 2011-01-12T10:05:12.253 回答
0

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

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

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

JWT 是一个可以用于此的已知标准,这里的这篇文章指向一个基于 JWT 的 ASP.Net 会话状态提供程序:

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

于 2020-10-17T18:39:18.647 回答