5

我正在使用 ASP .NET MVC 3 编写一个 Web 应用程序。我想使用 MemoryCache 对象,但我担心它会导致负载平衡 Web 服务器出现问题。当我用谷歌搜索时,看起来这个问题已经在服务器上解决了,即使用 AppFabric。如果一家公司有负载平衡的服务器,是否需要确保他们运行 AppFabric 或类似的东西?或者作为开发人员我有什么可以或应该做的吗?

4

2 回答 2

4

首先,对于 ASP.NET,您应该查看ASP.NET 缓存而不是 MemoryCache。MemoryCache 是在 .NET 4.0 中引入的通用缓存 API,用于在非 Web 应用程序中提供等效的 ASP.NET 缓存。

您正确地说 AppFabric 解决了多个服务器拥有自己的缓存数据实例的问题,因为它提供了一个可从所有 Web 服务器访问的逻辑缓存。在你将它作为解决问题的方法之前,有几件事需要考虑:

  • 它不作为 Windows Server 的一部分提供 - 正如您所说,如果您想使用它,您可以将它安装在您的服务器上。当 AppFabric 发布时,有人建议它将作为下一个 Windows Server 版本的一部分发布,但我还没有看到任何关于 Windows Server 2012 的信息证实了这一点。

  • 您需要额外的服务器,或者至少建议您拥有它们。Microsoft 对 AppFabric 的建议是在专用服务器上运行它。这意味着虽然 AppFabric 本身是免费下载的,但您可能会产生额外的 Windows Server 许可费用。说到那个...

  • 您可能需要企业版许可证。如果您想使用 AppFabric 的高可用性功能,您只能使用运行企业版的服务器来执行此操作,这是比标准版更昂贵的许可证。

  • 毕竟你可能不需要它。其中一些将取决于您的应用程序以及您为什么要使用共享缓存层。如果您担心多台服务器上的缓存可能与数据库(或实际上彼此)不同步,那么明智地使用SqlCacheDependency对象可能会让您解决问题。

于 2012-06-06T15:39:51.163 回答
1

这篇 CodeProject 文章Implementing Local MemoryCache Invalidation with Redis提出了一种处理您描述的场景的方法。

您没有提到您正在使用的负载平衡的味道:“粘性”或“无状态”。到目前为止,最简单的解决方案是使用粘性会话。

如果你想使用本地内存缓存和无状态负载平衡,你可能会遇到跨服务器失效消息延迟到达的竞争条件。如果您使用 ASP.Net MVC 中常见的 Post-Redirect-Get 模式,这可能会特别成问题。这可以通过使用 cookie 来补充缓存失效广播来克服。我在这里的一篇博文中详细说明了这一点。

于 2014-11-14T21:50:00.823 回答