【问题标题】:How can I manage Cache stored on the web server when I'm using 3 web servers?当我使用 3 个 Web 服务器时,如何管理存储在 Web 服务器上的缓存?
【发布时间】:2010-07-23 20:21:44
【问题描述】:

我们正在开发一个分布在 3 个负载平衡的 Web 服务器上的 Web 应用程序。我们通过 NHibernate 检索的很多数据都存储在 System.Web.Caching.Cache 中。

System.Web.Caching.Cache 在提高应用程序的响应能力方面做了很多工作,但有一些问题我们并不完全知道如何解决,例如

  1. 当用户在 server1 上请求数据时,该数据缓存在 server1 上,但对于他们的下一个请求,负载平衡器可能会将他们定向到 server2。他们在 server1 上请求的数据不再可用,server2 将不得不再次从数据库中请求。

  2. 如果用户在 server1 上执行某些操作以使缓存数据无效,则在 server1 上刷新缓存。但是,原始缓存在 server2 和 server3 上仍然可用,因此当用户提交后续请求并被定向到其他任何一个服务器时,他们将看到无效数据。

  3. 我们的应用程序会定期更新数据(例如性能数据)。当性能数据更新时,我们希望从缓存中刷新它,因此当用户再次请求数据时,他们会看到最新的数据。我们如何让这些应用程序刷新 3 个 Web 服务器上的缓存?

解决这些问题的最佳方法是什么?

我们是否应该将缓存存储在单独的服务器上,例如我们可以为HttpContext.Session 使用 SessionState 服务器?

有没有办法让我们在其他 2 台服务器的 Cache 上设置一个 Cache Dependency?

我们是否可以在实际的数据库表或行上实现缓存依赖?当这些更改缓存被刷新? -- 或者我们可以设置一个数据库触发器以某种方式刷新缓存吗?

【问题讨论】:

    标签: asp.net asp.net-mvc caching


    【解决方案1】:

    是的,多服务器环境暴露了 ASP.NET 缓存的弱点,因为它只是单服务器。您可能想考虑使用像AppFabric 这样的分布式缓存,它会为您提供一个位于所有三个 Web 服务器基础的逻辑缓存。

    AppFabric 可以与 NHibernate 一起用作二级缓存 - 请参阅 http://sourceforge.net/projects/nhcontrib/files/NHibernate.Caches/(尽管请注意 this question 表明当前的实现可能与 AppFabric v1 版本不同步)。

    【讨论】:

      【解决方案2】:

      你有几个选择:

      1) 使用分布式缓存(例如 distcache、velocity 或 ncache)

      2) 使用所有 Web 服务器都使用的共享缓存实例(例如 memcached 之类的)。

      NHibernate 为所有这些提供二级缓存提供程序,可以在 here 找到。

      【讨论】:

        猜你喜欢
        • 2011-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-06
        • 2020-02-25
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        相关资源
        最近更新 更多