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

StackOverflow https://stackoverflow.com/questions/369464

Вопрос

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

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

  1. OpenESB
  2. Мул
  3. Apache СервисМикс
  4. Апач Верблюд

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

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

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

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

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

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

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

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

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

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

Это одна из основных причин создания GUID.

-Адам

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top