如何在负载平衡的应用程序上按键删除缓存?

时间:2012-01-05 14:39:44

标签: asp.net caching

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

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

这是一个非常理论上的讨论,但这听起来像是适合你的事情吗?

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

答案 1 :(得分:0)

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

不是每个服务器都知道所有其他服务器,而是使用集中式进程(service / app / anything)对缓存清除请求进行排队,然后将其发送到服务器场中的每个服务器。

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

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