【问题标题】:Session State Server redundancy会话状态服务器冗余
【发布时间】:2010-10-27 13:27:38
【问题描述】:

我们目前有一个在单个服务器上运行的 ASP.NET Web 应用程序。该服务器即将达到 CPU 使用率的危险区域,我们想部署第二台服务器。

处理会话状态的最佳方法是什么?

我们目前运行 InProc。但这不是 2 台以上服务器的选项,因为有时我们希望从 WLB 轮换中排除单个服务器以进行维护工作。即使我们使用粘性负载平衡,我们也必须等待所有用户退出,然后才能将服务器从 WLB 轮换中排除。

所以我在看这个 MSDN 页面:http://msdn.microsoft.com/en-us/library/ms178586(VS.80).aspx

我想我的主要问题是:如果我们使用状态服务器模式。我们可以通过在两台服务器上部署状态服务器来确保冗余吗?避免出现单点故障。

【问题讨论】:

    标签: asp.net iis session-state


    【解决方案1】:

    我建议查看 p2p 会话状态服务器 - 链接在这里:http://www.codeproject.com/KB/aspnet/p2pstateserver.aspx

    为我工作。唯一的缺点是,如果您有一个大型数据集,则在对等点之间进行复制需要很长时间。

    【讨论】:

      【解决方案2】:

      您可能想查看项目速度 (http://msdn.microsoft.com/en-us/data/cc655792.aspx)。它现在的支持有限,因为它在 CTP3 上,但今年晚些时候它将是 RTM。我强烈建议您观看有关它的 MIX09 会议here

      【讨论】:

        【解决方案3】:

        如果您想要标准选项之一,我会在故障转移群集中使用 SQL Server。顺便说一句,你考虑过 memcacheddb 吗?

        【讨论】:

        • 请告诉我更多关于 memcached 的信息?
        • Martin 对不起,我的意思是 memcachedDB,虽然你可以让 memcached 复制它并不容易 - 在这里阅读:memcachedb.org。您必须检查 memcached 提供程序是否可以使用它(它应该)-codeplex.com/memcachedproviders.
        • 哦。这看起来是“自行负责使用 - 我们不提供任何支持或保证”。
        • 这就是为什么我还建议使用 SQL Server 故障转移集群,尽管该选项需要付出一定的代价(可能接受也可能不接受)。我在以前的 Web 应用程序中使用了 SQL Server 会话状态,它并不快,从内存中我认为慢了大约 25%,但这将取决于您的类型有多复杂。
        • 好的。因此,SQL Server 状态模式似乎是获得冗余并确保我们的应用程序无缝维护更新的唯一方法。我们在会话中存储了相当多的数据类型。我们需要重构一些代码以使其与状态服务器一起工作。谢谢。
        【解决方案4】:

        使用横向扩展状态服务器(更快更好)或 SQL 状态(更慢更简单)。但请注意,如果您将任何不可序列化的对象存储到 Session 状态中,因为迁移后会出现异常。

        【讨论】:

        • 还要注意 Global.asax 中的 Session_End 不会在状态服务器中触发,如果您在使用 inProc 时挂钩此事件,则会破坏功能。
        【解决方案5】:

        Sql 状态服务器将是一个更好的选择:此链接可能会有所帮助 Sql State Server .我不相信你可以在多台机器上运行状态服务器。

        【讨论】:

          猜你喜欢
          • 2016-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-24
          • 2010-11-25
          • 1970-01-01
          • 2020-01-27
          相关资源
          最近更新 更多