代码之家  ›  专栏  ›  技术社区  ›  Kevin Buchan

关于如何使用AppFabric的缓存功能的问题

  •  9
  • Kevin Buchan  · 技术社区  · 14 年前

    关于如何使用AppFabric的缓存功能的问题。

    我很抱歉问了一个我应该能够从文档中回答的问题,但我已经阅读、阅读和搜索过,无法回答这个问题,这使我相信我对AppFabric的缓存功能的预期有一个根本性的错误理解。

    我在一家地理分散的公司工作。我们有一个最初作为客户机/服务器应用程序编写的特定应用程序。它是如此庞大和至关重要的业务,我们希望能够逐步将其转换为更好的架构解决方案。

    我们的一个想法是将应用程序转换为使用WCF调用读取其数据,并将其转换为一个位于同一位置的Web服务器,该服务器将缓存与美国数据库的通信。应用程序的性质是这样的,每个人都会倾向于查看相同的2000条记录左右,只有偶尔的更新,这些更新将由有限的一组用户进行。

    我希望AppFabric的缓存机制允许我设置一个全局缓存,例如,当亚洲的用户请求不在缓存中或过时的数据时,Web服务器将从美国的数据库中读取数据,向用户提供数据,然后更新缓存,该缓存将数据传播到其他Web SE。服务器,这样他们就知道不会自己返回数据库。

    AppFabric可以这样工作吗,还是应该让服务器从数据库中检索自己的数据?

    1 回复  |  直到 14 年前
        1
  •  11
  •   PhilPursglove    14 年前

    如果我理解你的话,你有:

    • 美国的数据库服务器
    • 世界各地的网络服务器?
    • (可能)美国的AppFabric缓存

    AppFabric为您提供了两种可能的解决方案。

    1. 本地缓存
      在AppFabric设置中,客户机能够拥有对象的本地缓存,其中对象的第一个缓存调用将对象放置在本地缓存中,然后从本地缓存完成对该对象的后续请求。由于超时或主缓存通知本地缓存对象已过时,将从本地缓存中删除对象。在web.config中配置:

      <dataCacheClient>
          <localCache isEnabled="true" sync="NotificationBased" ttlValue="300" />
      </dataCacheClient>
      

      在您的情况下,您的Web服务器就是客户机;当您的一个亚洲用户请求一个对象时,亚洲Web服务器的本地缓存将保存该对象的副本。对该对象的更新将传播到主缓存,并且在基于通知的设置中,该对象在其他Web服务器上的本地缓存中的副本将无效,因此将从主缓存完成下一个请求,然后使用更新的对象刷新本地缓存。

    2. 在Web服务器上并置AppFabric缓存
      没有什么可以阻止您的Web服务器也成为AppFabric缓存服务器!在这个设置中,您不会使用本地缓存,因为当主缓存已经是客户机的本地缓存时,它就没有意义了。但是,这将确保客户端总是从缓存中提取缓存对象的最新版本。
      但是,您需要小心网络负载,因为此设置可能意味着您的美国Web服务器总是从(例如)您的欧洲Web服务器读取缓存对象,这可能会降低您的两个服务器的速度,因为它们试图提供缓存请求和Web流量。

    在这两种情况下,请记住,尽管客户端将接收缓存对象的最新版本,但AppFabric中没有持久性,您需要在更新缓存对象的同时将更改写入数据库,否则会有将过期数据读取到缓存中的风险。