由于负载平衡导致全局变量未更新

时间:2015-05-16 15:14:40

标签: java load-balancing haproxy

有两台运行Web服务的服务器,并且使用HAProxy对服务器进行负载平衡。

Web Service会发布帖子并使用特定值更新全局变量,而在同一服务器上运行的另一个应用程序将读取此全局值并进行一些处理。

我的问题是当我使用Web服务将值设置为gloabl变量时;由于负载均衡器,只有一台服务器得到更新。因此,应用程序有时会读取全局值,当请求转到第二个服务器时,它不会读取它,因为该服务器中的全局变量未更新。

有人能告诉我如何处理这样的情况。 Web服务和应用程序都是基于Java的。

1 个答案:

答案 0 :(得分:3)

首先,依赖全球数据可能是一个坏主意。更好的解决方案是将数据保存在某些公共存储中,例如数据库或(共享)Redis缓存。其次,您可以 - 如有必要 - 在负载均衡器上使用粘性会话,以便后续请求始终返回到同一Web服务器,只要它可用即可。后一种限定条件是应该首选共享缓存或数据库解决方案的原因之一 - 服务器可能会在用户会话期间因维护或其他问题而停机。