Как я могу синхронизировать два Java-приложения? - PullRequest
3 голосов
/ 18 января 2012

Вот ситуация, с которой я столкнулся: у меня есть два java-приложения similair, работающие на разных серверах.Оба приложения получают данные с одного и того же сайта, используя предоставляемый веб-сервис.Но сайт, конечно, не знает, что первое приложение получило такой же объем данных, как и второе приложение.После извлечения данные должны быть сохранены в базе данных.Поэтому у меня есть проблема сохранения одних и тех же данных два раза в базе данных.

Как мне избежать дублирования записей в моей базе данных?

Возможно, есть два способа:

1) использовать базу данных на стороне.напишите что-нибудь вроде «вставьте, если уникально».

2) используйте серверную часть.напишите какой-нибудь промежуточный сервис, который будет получать ответы от двух сборщиков данных и как-то обрабатывать их.

Полагаю, второе решение более эффективно.

Можете ли вы что-нибудь посоветовать по этой теме?Как бы вы внедрили этот промежуточный сервис?Как реализовать связь между сервисами?Если бы мы использовали HashMaps для хранения полученных данных, как мы можем оценить максимальный размер HashMap, который может обрабатывать наша система?

Ответы [ 2 ]

3 голосов
/ 18 января 2012

Вам действительно нужно получать данные одновременно на двух серверах?Проверка каждой записи во время ввода , если она отсутствует, может быть дорогой.Объединение нескольких выборок также может занять много времени.Есть ли какая-то польза от параллельного извлечения?Подумайте об одном сборщике за раз.

Проблема, с которой вы столкнетесь, заключается в том, что вам нужно выбрать, какой из распределенных процессов должен выполнять выборку данных и сохранять их в БД.из Leader Election проблема.

Взгляните на Apache ZooKeeper , который является распределенной службой координации.Существует квитанция о том, как осуществить выбор лидера с помощью ZooKeeper.

Существует множество платформ, которые уже реализовали эту квитанцию.Я бы порекомендовал вам использовать Netflix куратор .Более подробную информацию о выборах лидера с куратором можно найти на wiki .

3 голосов
/ 18 января 2012

Существуют распределенные структуры для решения подобных проблем.

  • Hazelcast - позволит вам распределить ConcurrentMap по нескольким JVM.
  • Terracotta - Используя его DSO (я думаю, распределенные общие объекты), он будет поддерживать реализацию Map в JVM; s
...