如何同步两个java应用程序?

如何同步两个java应用程序?,java,memory,synchronization,distributed,Java,Memory,Synchronization,Distributed,这里是我遇到的一种情况:我有两个相似的java应用程序运行在不同的服务器上。两个应用程序都使用提供的web服务从同一个网站获取数据。但该网站当然不知道第一个应用程序与第二个应用程序使用了相同的数据。提取后的数据应保存在数据库中。因此,我有一个问题,即在数据库中保存相同的数据两次 如何避免数据库中出现重复条目 可能有两种方式: 1) 使用数据库端。写一些类似于“如果唯一则插入”的内容 2) 使用服务器端。编写一些中间服务,接收来自两个数据获取程序的响应,并以某种方式处理它们 我认为第二种解决办法更

这里是我遇到的一种情况:我有两个相似的java应用程序运行在不同的服务器上。两个应用程序都使用提供的web服务从同一个网站获取数据。但该网站当然不知道第一个应用程序与第二个应用程序使用了相同的数据。提取后的数据应保存在数据库中。因此,我有一个问题,即在数据库中保存相同的数据两次

如何避免数据库中出现重复条目

可能有两种方式:

1) 使用数据库端。写一些类似于“如果唯一则插入”的内容

2) 使用服务器端。编写一些中间服务,接收来自两个数据获取程序的响应,并以某种方式处理它们

我认为第二种解决办法更有效

你能就这个话题提些建议吗?
您将如何实现该中间服务?如何实现服务之间的通信?如果我们使用HashMaps来存储接收到的数据,我们如何估计我们的系统能够处理的HashMap的最大大小?

对于这类问题,有分布式框架

  • -将允许您跨多个JVM拥有单个分布式
    ConcurrentMap
  • -使用它的DSO(我认为是分布式共享对象),它将跨JVM维护映射实现;

您真的需要同时在两台服务器上获取数据吗?在插入过程中检查每个条目(如果不存在)可能会很昂贵。合并多个回迁也可能很耗时。并行获取有什么好处吗?考虑一下有一个接线员。

您将面临的问题是,您必须选择哪个分布式进程应该执行数据获取并将其存储在DB中

这是某种问题

看看哪个是分布式协调服务。 这里有一个关于如何使用ZooKeeper进行领导人选举的问题


有很多框架已经实现了这个收据。我建议你使用。有关馆长领导选举的更多详情,请访问

迈尔贝克,谢谢你的回复。这种方法的一个问题是,我的所有应用程序都应该完全相同。所以我不能将获取代码放入第一个应用程序,也不能将其放入第二个应用程序。还是说Apache Zookeeper可以解决这个问题?真的,我想这可能是解决这个问题的第三种方法:创建一个只在其中一个应用程序上运行抓取例程的服务。换句话说,我需要一些东西来为我的应用程序生成信号,以便执行抓取操作。您正在运行的代码应该是相同的。您只需要在分布式流程之间达成一致意见,由他们中的哪一个担任领导者。例如,如果您有两台相同的服务器。在开始的时候,他们两人都必须决定谁是领导者。这可以使用ZooKeeper完成。如果第一个服务是领导者,它会获取数据并将其持久化到数据库,第二个服务是空闲的,反之亦然。这意味着我应该为此做些什么-更改属性文件、更改应用程序代码、从某些应用程序属性中编写代码等,这会使我的应用程序不完全相同。或者您建议使用一些外部服务来选择领导者?据我所知,您对两个已部署的应用程序都有相同的代码库。我建议您修改它(添加领导人选举代码)。然后将新版本部署到两台服务器。代码应该是相同的。ZooKeeper是一个外部服务,允许选择领导者。这非常有用!谢谢,戴维斯!