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

时间:2012-01-18 08:40:24

标签: java memory synchronization distributed

这是我遇到的情况:我在不同的服务器上运行了两个similair java应用程序。两个应用程序都使用提供的Web服务从同一网站获取数据。但该网站当然不知道第一个应用程序采用了与第二个应用程序相同的数据安全性。获取数据后应保存在数据库中。所以我遇到了在数据库中保存两次相同数据的问题。

如何避免数据库中的重复条目?

可能有两种方式:

1)使用数据库端。写一些看起来像“插入如果唯一”的东西。

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

我认为第二种解决方案更有效。

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

2 个答案:

答案 0 :(得分:3)

存在针对此类问题的分布式框架。

  • Hazelcast - 允许您跨多个JVM分配单个ConcurrentMap
  • Terracotta - 使用它的DSO(我认为是分布式共享对象)它将在JVM上维护一个Map实现; s

答案 1 :(得分:3)

您真的需要同时在两台服务器上获取数据吗?在插入期间检查每个条目(如果不存在)可能很昂贵。合并多次提取也很耗时。并行获取是否有任何好处?考虑一次拿一个抓手。

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

这是某种Leader Election问题。

查看Apache ZooKeeper这是分布式协调服务。 有receipt如何使用ZooKeeper实现领导者选举。

有很多框架已经实现了此收据。我建议你使用Netflix curator。有关领导人选举与策展人的更多详情,请访问wiki