java - 由于负载平衡,全局变量未更新

标签 java load-balancing haproxy

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

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

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

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

最佳答案

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

关于java - 由于负载平衡,全局变量未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30277315/

相关文章:

Python AIOHTTP.web 服务器多处理负载均衡器?

Tornado 未正确返回 HTTP 状态消息

HAProxy - 后端服务器的基本身份验证

ssl - HAproxy SSL 握手失败

java - 将 PHP 方法转换为 Java 代码

java - 通过按钮事件停止声音

load-balancing - kubernetes 集群内服务通信

security - HAProxy 是否默认保护自己免受 tcp syn flood 攻击

java - logback配置文件——将除调试之外的所有内容写入文件,作为日志记录到控制台

java - Hadoop中的“could only be replicated to 0 nodes, instead of 1”