2009-10-28 2 views
2

У нас есть приложение J2EE, на котором мы все еще работаем. Он работает на базе Oracle DB. и бизнес-уровень кодируется EJB 2.0 с богатым клиентским интерфейсом.Репликация данных между сайтами в приложении j2ee

сейчас приложение будет развернуто на нескольких сайтах. и каждый сайт будет создавать новые предметы (новые контракты и т. д.).

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

Как вы думаете, что является наиболее эффективным способом достижения этого?

Я думал о сериализации всех новых элементов, созданных и отправляемых на удаленный сайт для интеграции через очередь сообщений Java Message Service. это хороший подход?

и также будут внесены некоторые изменения, которые будут воспроизведены на спутниках.

ответ

2

Я бы сказал, что синхронная связь с центром вводит связь, которую вы не хотите. Следовательно, ваша асинхронная идея кажется мне очень приятной. Вероятно, в записях есть определенный идентификатор, зависящий от местоположения, так что новые создания контрактов в разных местах не будут конфликтовать, и вы принимаете некоторую задержку в репликации в центр.

Таким образом, простой случай заключается в том, что просто используйте JMS-сообщения из каждого местоположения в центр.

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

Вещи становятся более интересными, если вам также необходимо скопировать изменения с центра на спутники. Большой вопрос: можем ли мы столкнуться между изменениями в центре и изменениями на спутнике.

Простой корпус: Любой элемент данных имеет один «домашний». Например, исходный спутник - это место, где сделаны изменения. Или после создания центр - это единственное место, где можно внести изменения. В этом случае мы можем рассматривать центр как «концентратор», он может распространять изменения на спутники. Простая JMS будет отлично подходит для этого.

Немного труднее: изменения могут быть сделаны в любом месте, но только в одном месте за раз. Следовательно, мы можем ввести somne ​​вид, если схема блокировки. Я хотел бы иметь Центр в качестве владельца и использовать синхронные веб-службы для блокировки и обновления данных. Теперь мы связаны, но это необходимо, если мы хотим иметь окончательного владельца.

Достаточно сложный корпус: каждый может изменить что угодно, не блокируя. Это своего рода подход «Акт первым, извиниться позже». Мы придерживаемся оптимистического подхода, что изменения не будут конфликтовать. Мы можем отправить изменения для одобрения в центр, и центр может либо использовать оптимистичную блокировку, либо объединить безконфликтные изменения. Я хотел бы сделать это, изменив очереди в исходнике, но фактически обработав их синхронными вызовами. Таким образом, развязка спецификации изменения от доступности центра. Некоторые более сложные базы данных имеют возможности diff/merge, которые могут помочь в этом.

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

+0

некоторые изменения обязательно должны быть воспроизведены от центра до спутников. что бы вы предложили для этого? – Attilah

+0

Я обновлю ответ – djna

Смежные вопросы