【问题标题】:Correct Cache Architecture for Multiple Sites多个站点的正确缓存架构
【发布时间】:2013-04-03 11:53:58
【问题描述】:

我正在努力解决有关在单个 Web 服务器(IIS 8 / Windows Server 2012)上跨多个 Web 应用程序访问单个缓存的情况。

目前我们有一台内存为 16GB 的服务器,它只运行一个站点。 为了争论,假设这个网站自己消耗了 10GB 的内存(我知道很多)

它将所有内容存储在System.Web.HttpRuntime.Cache 中,检索速度非常快。一个典型的场景是从这个缓存中检索 10,000 个对象,这可以在几毫秒内完成。

当我想将另一个 Web 应用程序添加到该服务器时,它会变得棘手,该应用程序与服务器上运行的另一个站点 99.9% 相同,并且理想情况下希望访问该站点中的所有内容,以快速 HttpRuntime.Cache。

我看到的问题是,据我所知,这个 HttpRuntime.Cache 不能在应用程序之间共享。

我尝试过 AppFabric、Redis 和 NCache,所有分布式缓存代理,它们检索相同 10,000 个对象的绝对最快速度大约是 2 秒,这对于按需网站来说并不好。 (顺便说一句,我很确定这 2 秒中有 1.999 秒充满了反序列化,这也非常占用 CPU)

我是否遗漏了一些明显的东西......一个服务器上的两个 Web 应用程序访问不需要昂贵的序列化/反序列化的缓存的方法?或者是时候购买一个新的网络服务器了。

【问题讨论】:

    标签: asp.net caching redis appfabric


    【解决方案1】:

    我不能确定,所以我会尝试猜测:)

    当使用 redis 获取多个密钥时,请确保您在单个事务 (MULTI/EXEC) 中执行此操作,或者至少不要对每个密钥进行 1 次调用,因为这非常缓慢且效率低下(网络服务器会花费大量时间对 redis 进行 IO)。

    【讨论】:

      【解决方案2】:

      我了解你的情况。事实上,很多人都面临同样的问题。我会鼓励你

      使用 NCache 的客户端缓存功能,让您缓存整个子集

      .NET 应用程序的进程内存中的分布式缓存。

      使用客户端缓存,您可以实现性能目标。而且,由于幕后的分布式缓存,您仍然可以构建一个非常大的缓存。这是独立的 Http Cache 无法做到的。

      如果您想与NCache 团队中的某个人就此事进行一对一交谈,请告诉我。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-27
        • 2011-05-08
        • 2013-11-28
        • 2015-02-20
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        相关资源
        最近更新 更多