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



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

有什么想法吗?

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

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

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

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

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

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

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

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

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

最新更新