2014-09-22 81 views
0

在我当前的设置中,我有一个专用的Appfabric服务器。大多数存储在那里的对象都是引用对象,这意味着大部分操作都是“获取”操作。因此我考虑使用LocalCache。 不幸的是,最近我遇到了各种网络问题导致缓存服务器可用性的问题。在这些情况下,应用程序服务器继续直接与数据库一起工作,这要归功于我编写的提供程序。但是,它如预期的那样对性能有非常大的影响。多级缓存 - 带MemoryCahe的Appfabric

我希望能够使用某种类型的本地缓存为高度引用的对象,即使在高速缓存服务器已关闭。为此,我考虑使用.Net 4的MemoryCache。我并不在意那些陈旧的对象,而是依赖超时驱逐策略,因此我不担心应用程序服务器之间的同步。

我想听听你对这个解决方案有什么看法。 - 我还有其他要点吗? - 即使缓存服务器关闭,是否有更好的解决方案来为高度被引用的对象提供快速访问?

回答

0

的AppFabric的LocalCache是​​客户端缓存,本地和进程内客户端应用程序,存储频繁使用的数据的引用,因此应用程序并不需要再次反序列化相同的对象。但是,由于LocalCache与缓存服务器协同工作,如果缓存服务器关闭,它将不起作用。

一种解决方案可能你的问题是你所提到的,有一个独立的客户端缓存,这样即使高速缓存服务器出现故障,客户端缓存将仍然可用。

当INPROC缓存依靠你必须记住这一点缓存的对象的过程中的高速缓存存储参考。如果您的应用程序在从缓存获取后修改对象,它也会在缓存中进行修改。此外,如果多个线程最终可能会修改缓存中的相同项目,则您需要线程同步来处理此类对象。

然而,即使使用一个独立的客户端缓存,您的应用程序可能最终击中数据库频繁,因为在一个应用程序服务器的客户端缓存数据不会被accessable到其他服务器。

更好的解决办法可能是使用replicated cache servers,每个服务器将所有缓存数据。这不仅可以提高参考数据的性能,还可以消除单点故障,就像你的情况一样。

如果Appfabric不是应用程序的硬性要求,您可以查看NCache以获得更好的可伸缩性和高可用性。

0

你觉得AppFabric's local cache feature?或者它不适合你?

+0

正如我所提到的,我确实考虑过这一点。但是,当服务器关闭时,我无法使用它,这是主要问题。 – Sagi 2014-09-23 07:42:50