多个站点的正确缓存架构

时间:2013-04-11 10:15:28

标签: asp.net caching redis appfabric

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

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

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

当我想向服务器添加另一个与服务器上运行的其他站点99.9%相同的Web应用程序时,它变得棘手,理想情况下想要访问这些站点中的所有内容,快速点亮HttpRuntime.Cache。

我看到的问题是,就我所知,这个HttpRuntime.Cache无法跨应用程序共享。

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

我是否遗漏了一些显而易见的东西......一种服务器上的两个网络应用程序访问一个不需要昂贵的序列化/反序列化的缓存?或者是时候挖出新的网络服务器了。

2 个答案:

答案 0 :(得分:0)

我无法确定这一点,所以我会尝试猜测:)

使用redis获取多个密钥时,请确保在单个事务(MULTI / EXEC)中执行此操作,或者至少每个密钥执行1次调用,因为这非常慢且效率低(Web服务器会花很多时间)时间做IO到redis)。

答案 1 :(得分:0)

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

使用NCache的客户端缓存功能,可以缓存整个

的子集

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

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

如果您想与NCache小组进行一对一的讨论,请与我联系。