caching - 适用于大型网站的 AppFabric 缓存

标签 caching architecture appfabric

我们的 Web 应用程序部署在一个网络场(超过 20 台服务器)中。该网站拥有巨大的流量(每天数百万的页面浏览量)。 在第一个版本中,该应用程序使用 EntLib 的 CacheManager(Entreprise 应用程序 block 缓存)。我们称之为“本地服务器缓存”。有很多好处,但我们仍然有一个主要缺点:每个服务器管理自己的缓存和对数据库的访问(不是分布式的)。

这就是我们尝试实现 AppFabric 缓存功能以减少数据库往返的原因。我们面临的主要问题之一是数据同步:

  • 使用 GetAndLock/PutAndUnLock(又名分布式锁)页面响应时间受到严重影响
  • 使用 Get/Put + 简单的服务器端锁,我们对本地缓存有如此多的请求;没有任何好处。

那么大型网站的缓存策略是什么?

谢谢

最佳答案

我想说的是尽可能缓存只读数据。为此,您可以使用 AppFabric 缓存服务。您可以设置一个由 5 个缓存服务器组成的集群。然后,所有 20 个前端服务器都会与该缓存集群通信以获取缓存数据。您还可以利用将最频繁的数据直接保留在前端(本地缓存)的优势。例如我们的配置是这样的:

  • 具有 LocalCache 的前端(16 台计算机)可存储 150.000 个最常用的项目
  • 具有 HighAvailability 模式的缓存集群(4 台机器),将所有数据存储到缓存
  • 包含所有数据的数据库(1 台机器)

对于您想要更新的数据来说,这会变得更加棘手。每次引入锁时,您的性能都会受到影响。

关于caching - 适用于大型网站的 AppFabric 缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6041796/

相关文章:

Swift MVVM - 使用协议(protocol)来处理 viewModel 事件

azure - 检测并删除 Azure 服务总线上的孤立队列、主题或订阅

ruby-on-rails - Rails 模型缓存

java - 用于范围分页的数据库缓存策略

c# - 无法让 Polly 处理折叠请求

amazon-web-services - 如何避免单页应用程序中的 CORS 预检请求?

c# - 如何正确地将类与框架解耦(源代码级解耦)

installation - 在 Windows Server 2012 上安装 AppFabric 1.1 出现错误

.net - AppFabric 1.1 缓存(导致 Windows 服务崩溃)

java - Servlet 响应应该被缓存,但没有