2013-04-11 62 views
1

Im在单个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秒,这对于按需网站是没有好处的。 (顺便说一下,林肯定相当肯定这两秒钟的1.999是充满解密这也是非常密集的CPU)

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

回答

0

我不能肯定这个,所以我会尽量做一个猜测:)

当使用Redis的获得多个按键,确保你做一个单一的事务中(MULTI/EXEC)或至少你不会做每个键1次调用,因为这是非常慢和低效率(网络服务器会花很多时间去做IO)。

0

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

使用的nCache的客户端缓存功能,让你缓存整个

分布式缓存的子集在.NET应用程序的进程内存。

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

让我知道你是否想与NCache团队中的某个人进行一对一的谈话。