【问题标题】:How to transfer session data from one server to another server?如何将会话数据从一台服务器传输到另一台服务器?
【发布时间】:2010-02-09 13:54:39
【问题描述】:

我们开发了一个仅在一台服务器上运行的 Web 应用程序。现在客户端需要我们的应用程序位于两台服务器中。因此,如果其中一台服务器停机,那么另一台服务器应该正在工作。我们在我们的应用程序中使用会话。现在的问题是如何将会话数据从一台服务器传输到另一台服务器??

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    您需要session server 才能执行此操作。

    这通常意味着将作为一个 SQL 服务器,但有 other options

    【讨论】:

    【解决方案2】:

    ASP.NET 允许您在one of three places 中获取会话信息(请参阅下面的 MSDN 列表)。方法 2 或 3 可以很好地解决您的困境。

    1. InProc 模式,将会话状态存储在 Web 服务器的内存中。这是默认设置。

    2. StateServer 模式,它将会话状态存储在称为 ASP.NET 状态服务的单独进程中。这可确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于 Web 场中的多个 Web 服务器。

    3. SQLServer 模式 将会话状态存储在 SQL Server 数据库中。这可确保在重新启动 Web 应用程序时保留会话状态,并使会话状态可用于 Web 场中的多个 Web 服务器。

    当然,除非您还有冗余状态机,否则您仍然会遇到单点故障。

    【讨论】:

      【解决方案3】:

      移至 SQL 会话状态模型并使用 SQL Server 对其进行后端处理。这是Microsoft How-To

      【讨论】:

        【解决方案4】:
        【解决方案5】:

        您需要做的是在复制的数据库中(例如,使用 SQL 服务器)维护会话数据,而不是在一台机器上本地维护。

        请注意,当您使用此技术时,您将获得可靠性,但由于使用数据库的开销而损失了延迟。

        【讨论】:

          【解决方案6】:

          查看ScaleOut State Server。此小工具将在多个服务器之间共享会话状态,因此如果一个服务器出现故障,则不会丢失任何会话。

          【讨论】:

            【解决方案7】:

            通常有几种方法可以解决这个问题:

            • 运行 StateServer,让状态服务处理您的会话数据。节省您访问数据库的时间,但会给您留下单点故障

            • 将您的状态放入 SQLServer。给数据库带来一些额外的负载。但是如果你有集群,你可以避免单点故障

            • 负载平衡器中的粘性连接。负载均衡器会记住上次为您服务的服务器,然后再次将您发送到那里。如果有问题的服务器已关闭,则您的会话将丢失。

            • 还有一些分布式状态服务器产品,例如 NCache,它可以让您将状态服务分布到多个服务器上。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-04-20
              • 1970-01-01
              • 2018-06-12
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多