【问题标题】:AppFabric Caching for large scale web sites适用于大型网站的 AppFabric 缓存
【发布时间】:2011-05-18 08:22:49
【问题描述】:

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

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

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

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

谢谢,

【问题讨论】:

    标签: caching architecture appfabric


    【解决方案1】:

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

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

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

    【讨论】:

    • 这是一个典型的appfabric缓存架构。我想要一个更新数据的策略:数据过期时在页面请求内?通过后台线程(并保留我的数据的脏副本以供返回)?通过专门的服务(但如何处理业务规则)?我已经列出了这个可能的解决方案。有什么想法吗?
    【解决方案2】:

    正如我在 MSDN 中提到的,即时一致性的成本很高。您必须在一致性方面做出一些权衡,或者投入大量资金才能立即保持一致。使用我们在 MSDN 上讨论的隔离读/写模型以及队列,可能会为您提供最好的性能/一致性。 David 建议的多层缓存也非常好,具体取决于您的整体架构/设计。使用您自己的本地进程内或本地缓存实现也提供了很多价值——我自己并不喜欢 AppFabric 的 OOTB 本地缓存。

    --ab

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-30
      • 1970-01-01
      • 2011-01-15
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 2011-08-17
      相关资源
      最近更新 更多