java - 当应用程序部署在负载均衡器后面的多个实例上时,如何在 Java 中同步公共资源
问题描述
当我的 Java 应用程序部署在负载均衡器后面的多个实例上时,我们如何使用 Java 中的同步来同步访问公共资源?
因为,据我所知,同步只能在一个 JVM 下工作。但是当我们在多个实例上部署同一个 Java 应用程序来处理负载时,我们如何提供同步机制呢?
例如:-有一个 HDFS 文件,Java 应用程序可以向该文件附加/编辑该 HDFS 文件的内容。当我在多个实例上部署我的 java 应用程序时,如何确保只有一个来自 Java 应用程序的请求访问该 HDFS 文件?
解决方案
简短的回答 - 如果不在您的设置中引入很多复杂性,您就无法做到这一点。
虽然从技术上讲,您可以使用Zookeeper上可用的分布式锁之类的东西。我不会真的推荐他们。在规模上与它们进行推理有点困难,而且 Zookeeper 操作本身也有额外的复杂性。
关于您发布的示例,这不就是为什么要构建像 HBase 这样的系统吗?将您的数据建模为 Key->[Multiple Columns] 格式。然后,您可以在 HBase 上读取/写入数据,它会在幕后为您完成编辑/管理多个文件的繁重工作。
另一方面,如果您可以将您想要对文件执行的更改建模为事件,那么您可以根据事件驱动架构的原则构建您的系统。
你可以阅读更多关于这个
- Martin Fowler 的 EDA 介绍视频 - https://www.youtube.com/watch?v=STKCRSUsyP0
- 第 1 部分 - https://www.confluent.io/blog/build-services-backbone-events/
- 第 2 部分 - https://www.confluent.io/blog/apache-kafka-for-service-architectures/
- Martin Fowler 在本次演讲中谈到的 CQRS 模型 - https://martinfowler.com/bliki/CQRS.html
推荐阅读
- flutter - 无论如何要在 reorderables 包的包裹之间移动瓷砖?
- node.js - Mongoose 不能在根路径中引用 refPath
- python - 无法建立新连接:[Errno 11001] getaddrinfo failed' in Python 3.9
- php - 消息:必需参数 $img 跟随可选参数 $w 文件名:lib/class.pdf.php
- amazon-web-services - 将 AWS IAM 配置文件附加到 Azure VM
- macos - 在 Word for Mac 中,如何制作仅在第一页上带有页眉的模板,在所有页面上都带有页脚?
- python - 使用opencv和python提取魔方的颜色
- php - 在 PHP 中包含带有文件夹的文件的问题
- sql - 为什么 WHERE 子句中的 CASE 与使用 AND/OR 运算符时返回的结果不同?
- java - 进入后台模式