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

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

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

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

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

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

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

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

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

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 созданы для ограниченных целей, и одной из целей является простая синхронизация данных между разнородными системами на предприятии. И они делают свою работу очень хорошо.

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

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

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

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

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

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

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

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

-Адам

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

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

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

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

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

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

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

Другие вопросы по тегам