在多个服务器中缓存内存中的映像

时间:2016-06-21 20:21:23

标签: c# asp.net-mvc caching memcached

首先,我必须提到缓存的一些基础知识。如果要将对象缓存在堆内存中,则对象应该是可序列化的,因为它必须通过网络传输。因此,如果要缓存Image Magic对象,则必须将其转换为内存流,然后在读取它时,再次将内存流转换为Image魔术对象。

但是,如果要使用使用堆内存的MemoryCache,则可以缓存每个对象而无需序列化。

现在我的情况:我有两台AWS服务器,它们托管我们的16个网站并配有负载均衡器。因此,我们在两个不同的网站上有16个相同应用程序的实例。我有超过2000张图片在S3上。目前我正在阅读它们并作为内存流,然后将它们转换为Image magic并将其与用户图片相结合,并向最终用户显示组合图像。为了提高性能,我必须缓存图像魔术图像并从缓存中读取它们,这样可以消除将内存流转换为图像魔法的时间,但是如果我使用Memorycache则会有16个独立的应用程序池,因此很快内存就会满了它不会有效,因为负载均衡器将在两个服务器之间分配请求。因此,如果第一个请求进入服务器1并且x被高速缓存,则第二个请求进入服务器2,然后x再次高速缓存在服务器2中。如果我使用memcache,那么序列化就是问题所在。

条件信息:Web应用程序位于MVC中。

1 个答案:

答案 0 :(得分:0)

我做了很多研究。无法缓存堆中的对象并通过网络缓存它们而不对其进行序列化。通过网络传输的任何对象都必须是可序列化的。因此,对于这个问题没有解决方案,我们如何将图像放入不在堆中的缓存中。实际上,您可以序列化图像并对其进行缓存,但是没有必要这样做,因为它需要序列化和反序列化,这在服务器上有很多过载。