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

У меня есть, скажем, 2 (но их станет больше в будущем) полностью отделенные системы: система A и система B.

Допустим, каждый фрагмент информации в каждой системе имеет идентификатор информации. Ничто не мешает информации, чтобы она была одинаковой в разных системах. То, что однозначно идентифицирует часть информации во всех системах, является парой Source-informationID.

Допустим, мне нужно экспортировать часть информации из системы A в систему B. Затем я хочу экспортировать ту же часть информации из системы B и повторно импортировать ее в систему A, и мне нужно иметь возможность распознать, что это та же самая часть информации.

Какой лучший способ сделать это на опыте людей?

Вот что я думаю сделать:

  1. Настройте шину сообщений между системами с очередями сообщений.
  2. Настройте конечные точки для каждой системы, которая будет отслеживать изменения и генерировать команды, помещенные в сообщения, которые будут помещаться в очереди (например, когда часть информации создается / удаляется / обновляется).
  3. Назначьте ранги конечным точкам, относящимся к командам создания / удаления / обновления, чтобы не полагаться на системные имена, а только на общую иерархию - чтобы каждой системе не нужно было знать о других.
  4. Присвойте порог для команды update / delete / create каждой конечной точке, чтобы команды, не отвечающие требованию порога, были отфильтрованы и не обработаны

Это не решит тот факт, что мне все еще нужно носить с собой originalSource + originalSourceID.

Любая помощь приветствуется.

15.12.2008 19:35:04
Я думаю, что «та же самая» информация может быть изменена, иначе вам не нужно было бы ее повторно импортировать, не так ли?
Svante 15.12.2008 21:28:09
да, это может быть отредактировано, создать удалить везде, но мне нужно отслеживать, что к чему
JohnIdol 16.12.2008 08:30:10
5 ОТВЕТОВ
РЕШЕНИЕ

Эта проблема решалась поставщиками EAI (Enterprise Application Integration), такими как Tibco и webMethods.(теперь часть Software AG). Я никогда не использовал Tibco раньше, но я использовал webMethods для решения подобных проблем, поэтому я сосредоточусь только на webmethods. Например, на предприятии данные о сотрудниках могут находиться как в Active Directory, так и в PeopleSoft. Веб-методы могут быть использованы для обеспечения того, чтобы изменения, дополнения, удаления в одной системе (приложении) отражались в другой в реальном времени. В некоторых других организациях данные о сотрудниках также могут находиться в базе данных Oracle или SQL Server. Опять не проблема. Эти инструменты EAI, такие как webMethods, могут общаться с широким спектром серверных частей. webMethods не ограничивается одним источником и одной целью, но поскольку он имеет архитектуру публикации-подписки, данные из одного источника могут передаваться нескольким заинтересованным целям, которые подписываются на определенный фрагмент информации. Гарантированная доставка и, возможно, другие функции могут быть найдены в этих продуктах. Возвращаясь к примеру сотрудника, в конечном счете, если все сделать правильно, в любой момент времени все системы и приложения на предприятии могут содержать одинаковую информацию о сотрудниках без каких-либо расхождений.

Поэтому вместо того, чтобы заниматься программированием на C # или Java, вы будете заниматься программированием webMethods, которое очень похоже на язык 4GL. Я называю это программированием, потому что в нем все еще присутствует логика, цикл, если не так, ветвь, переменные, пакеты и т. Д., Но он очень ориентирован на процедуры, то есть вообще не имеет понятия ООП.

Эти инструменты EAI созданы для ограниченных целей, и одной из целей является простая синхронизация данных между разнородными системами на предприятии. И они делают свою работу очень хорошо.

Недостатком является то, что эти инструменты стоят больших денег. Компании часто имеют долгосрочную стратегию, прежде чем инвестировать в эти инструменты.

2
15.12.2008 20:42:13

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

1
15.12.2008 20:15:38
это подход Big-DB - это вариант, который я изучаю. У этого есть свои недостатки, хотя относительно того, что это могло стать грязным достаточно скоро.
JohnIdol 15.12.2008 20:50:32

Мы делаем в точности то же самое, что и A -> B -> То, что вы описываете. Изначально мы рассматривали попытку сделать так, чтобы все A, B, C и т. Д. Были равноправными, но это было слишком сложно, поэтому теперь мы определяем одного как хозяина, а другие - как рабов. Все еще достаточно легко получить материал от одного раба к другому, но через мастера.

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

Таким образом, код идентичен в каждой системе. Только рабы называют домом.

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

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

Кстати, мы не улучшили уникальность Source / Id :)

2
15.12.2008 21:00:34
звучит как хороший вариант - одно из моих главных опасений - уникальность Source-Id!
JohnIdol 15.12.2008 21:11:55

Как кто-то уже писал, это звучит как типичная проблема EAI. Даже если раньше инструменты EAI были дорогими, сейчас существует широкий выбор бесплатных инструментов с открытым исходным кодом. Ниже приведен список тех, которые мне нравятся больше всего

  1. OpenESB
  2. мул
  3. Apache ServiceMix
  4. Apache Camel

Мой фаворит - OpenESB, я знаю его лучше, у него есть полная IDE (Netbeans), дополнительная поддержка от крупного поставщика и огромное количество дополнительных компонентов . За его простоту и эффективность я люблю Apache Camel, но вы можете попробовать некоторые из них и решить, какой из них лучше для вас. Тогда вы даже можете купить услуги поддержки для всех этих.

4
31.01.2009 02:38:04

Это значительно упрощается, если вы назначаете каждому фрагменту информации идентификатор GUID. Если вам нужно отслеживать исходные и другие идентификаторы, это нормально, но информация всегда должна передаваться с назначенным GUID.

Когда машина снова увидит этот фрагмент информации, она увидит GUID и свяжет его с существующими данными, а затем вы сможете решить, что делать. Но вы уже знаете, что это тот же кусок данных - просто лучше путешествовать.

Имейте в виду, что GUID создаются таким образом, что каждая машина будет создавать свою собственную, и они не будут конфликтовать (для всех практических целей и задач) с GUID, созданными на другой машине или на той же машине в другое время.

Это одна из основных причин, по которой были созданы GUID.

-Адам

2
31.01.2009 02:50:47
Похоже, мой GUID может быть source + sourceID
JohnIdol 31.01.2009 15:46:25