我们的 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/