首页 > 解决方案 > 当应用程序部署在负载均衡器后面的多个实例上时,如何在 Java 中同步公共资源

问题描述

当我的 Java 应用程序部署在负载均衡器后面的多个实例上时,我们如何使用 Java 中的同步来同步访问公共资源?

因为,据我所知,同步只能在一个 JVM 下工作。但是当我们在多个实例上部署同一个 Java 应用程序来处理负载时,我们如何提供同步机制呢?

例如:-有一个 HDFS 文件,Java 应用程序可以向该文件附加/编辑该 HDFS 文件的内容。当我在多个实例上部署我的 java 应用程序时,如何确保只有一个来自 Java 应用程序的请求访问该 HDFS 文件?

标签: javamultithreadingthread-safetyload-balancing

解决方案


简短的回答 - 如果不在您的设置中引入很多复杂性,您就无法做到这一点。

虽然从技术上讲,您可以使用Zookeeper上可用的分布式锁之类的东西。我不会真的推荐他们。在规模上与它们进行推理有点困难,而且 Zookeeper 操作本身也有额外的复杂性。

关于您发布的示例,这不就是为什么要构建像 HBase 这样的系统吗?将您的数据建模为 Key->[Multiple Columns] 格式。然后,您可以在 HBase 上读取/写入数据,它会在幕后为您完成编辑/管理多个文件的繁重工作。

另一方面,如果您可以将您想要对文件执行的更改建模为事件,那么您可以根据事件驱动架构的原则构建您的系统。

你可以阅读更多关于这个


推荐阅读