【问题标题】:Multi level cache - Appfabric with MemoryCahe多级缓存 - 带有 MemoryCahe 的 Appfabric
【发布时间】:2014-09-22 13:17:12
【问题描述】:

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

我希望能够为高度引用的对象使用某种本地缓存,即使缓存服务器已关闭。为此,我考虑使用 .Net 4 的 MemoryCache。我并不真正关心过时的对象,并且我依赖于超时驱逐策略,因此我不担心应用程序服务器之间的同步。

我想听听您对此解决方案的看法。 - 我还有什么需要考虑的吗? - 是否有更好的解决方案来为高度引用的对象提供快速访问,即使在缓存服务器关闭时也是如此?

【问题讨论】:

    标签: c# caching memory .net-4.0 appfabric


    【解决方案1】:

    Appfabric 的 LocalCache 是一个客户端缓存,对客户端应用程序来说是本地的和进程内的,它存储了经常使用的数据的引用,因此应用程序不需要再次反序列化相同的对象。但是,由于 LocalCache 与缓存服务器一起工作,因此如果缓存服务器关闭,它将无法工作。

    正如您所提到的,一个可能解决您的问题的方法是拥有一个独立的客户端缓存,因此即使缓存服务器出现故障,客户端缓存仍然可用。

    当依赖 inproc 缓存时,您必须记住,进程内缓存存储缓存对象的引用。如果您的应用程序在从缓存中获取对象后修改了对象,它也会在缓存中进行修改。此外,如果多个线程可能最终修改缓存中的同一项目,您将需要对此类对象进行线程同步。

    但是,即使使用独立的客户端缓存,您的应用程序最终也可能会频繁访问数据库,因为其他服务器无法访问一个应用程序服务器的客户端缓存中的数据。

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

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

    【讨论】:

      【解决方案2】:

      你考虑过AppFabric's local cache feature吗?还是不适合你?

      【讨论】:

      • 正如我所提到的,我确实考虑过这一点。但是当服务器关闭时我无法使用它,这是主要问题。
      猜你喜欢
      • 2011-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多