【问题标题】:How do delete cache by key on a load balanced application?如何在负载均衡的应用程序上按键删除缓存?
【发布时间】:2012-02-03 09:12:08
【问题描述】:

我有 3 个 Web 服务器的负载平衡应用程序。我有一个要求,在单击按钮时,我需要同时在所有三个网络服务器上按键删除缓存。例如,有一个名为 currentTemperature 的缓存。因此,当我单击一个按钮时,我只想在所有三个 Web 服务器上删除缓存 [“currentTemperature”]。我不希望在此过程中删除任何其他缓存项。

有什么想法吗?

【问题讨论】:

    标签: asp.net caching


    【解决方案1】:

    当您运行负载平衡的网络场时,每台服务器都有自己的缓存。一种可能性是实现一种机制,使响应原始“删除缓存”请求的 Web 服务器向其他服务器发出相同的请求。但是,这可能会变得非常复杂且难以管理。每台服务器都需要“了解”场中的其他服务器,才能知道要联系哪些其他服务器。

    如果您将某些内容放入配置文件(或数据库)以存储服务器的完整列表(可能通过直接内部 IP 地址)并编写缓存清除代码以自动发现当前服务器,那么相同的代码可以部署到所有服务器。

    或者,您可以简单地使用蛮力方法。保留内部 IP 的列表,当 Web 服务器处理某个请求时,让它向所有内部 IP 发送相同的请求。处理请求的代码需要知道它是内部请求还是外部请求,以避免来自每个服务器的请求无限循环。这可以通过查询字符串中的名称/值对来完成,该对表明它是一个内部请求 - 不会包含在来自浏览器的请求中。

    这是一个非常理论化的讨论,但听起来对你有用吗?

    注意:这假定您的缓存是在每个 Web 服务器上的 IIS 应用程序中完成的,而不是在单独的自定义服务层中完成的。

    【讨论】:

    • +1 表示缓存清除无限循环的可能性
    【解决方案2】:

    无论采用何种机制,都需要了解所有需要清除缓存的服务器。

    不是每个服务器都知道所有其他服务器,而是有一个集中的进程(服务/应用程序/任何东西),它将缓存清除请求排队,然后将其发送到场中的每个服务器。

    这样您就可以将逻辑放在一个地方,避免可能的无限循环(每个服务器更新其他服务器,更新原始服务器等),并且可以通过最小的更改进行扩展。

    Web 服务器不负责管理队列 - 只是将缓存清除事件传递给某个集中式进程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-28
      • 2013-01-04
      • 1970-01-01
      • 2011-12-09
      • 2018-02-26
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多