【问题标题】:ASP.Net server side data caching on a web farmWeb 场上的 ASP.Net 服务器端数据缓存
【发布时间】:2013-12-14 00:23:10
【问题描述】:

场景:

在 Web 农场场景的 ASP.Net 应用程序的 WCF 层中实现主数据的内存缓存

  1. 数据在首次访问服务层时缓存,例如,缓存的 GetCountryList() 方法的到期时间设置为午夜。假设缓存键是“CountryList_Cache”
  2. 所有后续请求都通过缓存提供服务'
  3. 如果使用主屏幕更新国家/地区列表,则会进行额外调用以使“CountryList_Cache”无效并将新数据加载到其中
  4. 下一个呼叫现在收到更新的国家/地区列表 上述步骤在单服务器场景中很容易,因为步骤 3 只需要对一个服务器进行缓存到期调用。当我们有 2 或 3 台负载平衡的 Web 服务器时,复杂性会增加,因为在这种情况下,缓存仅在其中一台服务器上更新(通过主屏幕),但必须在所有 3 台服务器上失效。

我们提出的解决方案:

我们打算有一个外部服务/exe/网页,它会知道所有负载平衡的服务器(通过配置文件)。为了使特定的缓存失效,我们会调用这个外部组件,这反过来会使所有 Web 服务器上的相应缓存键失效,并加载并缓存最新的数据。

问题:

虽然上述方法对我们有用,但我们认为它对于企业级 LOB 应用程序来说不是一种干净的方法。是否有更好/更清洁的方法来实现跨多个服务器的缓存到期?

注意:

  1. 与进程内/内存中缓存相比,由于明显的性能损失,我们不想使用分布式缓存
  2. 已使用 System.Runtime.Caching 实现缓存
  3. 我们已经处理过 SQL 依赖并在单个 Web 服务器的场景中使用它

【问题讨论】:

    标签: asp.net wcf caching


    【解决方案1】:

    将您的设计与 Windows Azure 角色内缓存和 AppFabric 缓存进行比较。

    在这些产品中,缓存存储在一个或多个服务器(缓存集群)中。为了加快请求速度,他们创建了Local Cache

    启用本地缓存后,缓存客户端会存储对 对象本地。此本地引用使对象保持活动状态 客户端应用程序的内存。当应用程序请求 对象,缓存客户端检查对象是否驻留在 本地缓存。如果是,则返回对该对象的引用 立即无需联系服务器。如果不存在,则 从服务器检索对象。然后缓存客户端 反序列化对象并新存储对此的引用 在本地缓存中检索到的对象。客户端应用程序使用这个 同一个对象。

    本地缓存可以通过超时和/或通知失效

    Notification-based Invalidation

    当您使用缓存通知时,您的应用程序会检查 定期缓存集群以查看是否有任何新通知 可用。这个间隔,称为轮询间隔,是每个 默认为 300 秒。轮询间隔以 应用程序配置设置中的秒数。请注意,即使使用 基于通知的失效,超时仍然适用于 本地缓存。这使得基于通知的失效互补 到基于超时的失效。

    【讨论】:

      猜你喜欢
      • 2013-07-09
      • 1970-01-01
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2014-04-25
      • 2012-07-05
      • 2017-02-01
      相关资源
      最近更新 更多