【问题标题】:How to handle ASP.NET Application variables in a load-balanced web farm如何在负载平衡的 Web 场中处理 ASP.NET 应用程序变量
【发布时间】:2012-03-14 16:22:02
【问题描述】:

我正在将站点从单个服务器移动到由负载平衡器后面的三个 Web 服务器组成的服务器场。处理会话管理似乎很容易 - 只需在负载均衡器上设置“粘性”会话(我们评估了基于 SQL 的会话管理,但决定继续使用 InProc 会话管理以提高效率)。

但是,我们还使用了一个相当大的配置对象,我们保留在应用程序空间中(例如 Application[ObjName])。由于配置对象是从内存中加载的,因此在有人对配置进行更改之前我们没有问题。此时,托管服务器上的应用程序将发生变化,而数据库将发生变化。但是,其他两台服务器不会有变化。我们已经讨论过“每分钟一次”的轮询规则(例如,在新会话中)、将信息保留在会话中(效率不高)等。所有这些都有严重的缺点。我想知道其他人是怎么做的。是否可以在 SQL Server 上保留应用程序空间,但保留会话空间 inproc?任何有关如何处理此问题的帮助或见解将不胜感激!

【问题讨论】:

    标签: asp.net load-balancing


    【解决方案1】:

    Application[] 始终是基于本地内存的,所以无论您要进行什么代码更改。所以把它放在其他地方,比如分布式缓存,AppFabricNCachememcached.net 等。当有人对配置进行更改时更新缓存,当您需要读取从缓存中读取的设置时。传播/同步由缓存本身负责。

    【讨论】:

    • 谢谢@blowdart。我们检查了 AppFabric 和 NCache,但最终决定每 10 分钟轮询一次。一旦系统运行,配置更改就非常罕见,以至于我们认为添加另一个第三方组件是不值得的。尽管如此,我还是喜欢 AppFabric,而且如果我们真的需要分布式缓存,将它放在我们的后兜里真是太好了。
    【解决方案2】:

    我们目前决定使用 NCache,因为我们的网络农场有 4 个网络服务器。这个第三方缓存工具可以完美地与负载均衡器配合使用,并且易于配置(只有它的 Express 版本是免费的。对于专业版和企业版,只有 Developer Machine 是免费的)。它也非常快速和稳定。您必须在每台服务器上设置 NChache 并将负载均衡器设置为与所有服务器一起使用。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 2011-11-18
      • 1970-01-01
      • 2014-07-23
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      相关资源
      最近更新 更多