분리된 시스템 간에 데이터를 동기화하는 가장 좋은 방법은 무엇입니까?

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

문제

완전히 분리된 시스템 2개(그러나 미래에는 더 많아질 것임)를 가정해 보겠습니다.시스템 A와 시스템 B.

각 시스템의 모든 정보에 informationID가 있다고 가정해 보겠습니다.informationID가 다른 시스템에서 동일하게 유지되는 것을 막을 수는 없습니다.모든 시스템에서 정보를 일의적으로 식별하는 것은 Source-informationID 쌍입니다.

시스템 A에서 시스템 B로 정보를 내보내야 한다고 가정해 보겠습니다.그런 다음 동일한 정보를 시스템 B에서 내보내고 이를 시스템 A로 다시 가져오려면 해당 정보가 동일한 정보라는 것을 인식할 수 있어야 합니다.

사람들의 경험에서 이를 수행하는 가장 좋은 방법은 무엇입니까?

이것이 내가 하려고 생각하는 것입니다:

  1. 메시지 큐가있는 시스템간에 메시지 버스를 설정하십시오.
  2. 각 시스템에 대한 끝점 설정 변경 사항을 모니터링하고 래핑된 명령 생성 펌핑될 메시지 큐로(예: 정보가 created/deleted/updated)를 참조하십시오.
  3. 시스템 이름에 의존하지 않고 일반적인 계층에만 의존하기 위해 명령을 작성/삭제/업데이트하는 것과 관련하여 엔드 포인트에 순위를 할당합니다. 각 시스템은 다른 시스템에 대해 알 필요가 없습니다.
  4. 각 엔드 포인트에 업데이트/삭제/작성 명령에 미분 값을 할당하여 미분 값 요구 사항을 충족하지 않도록 명령이 필터링되고 처리되지 않도록합니다.

그래도 여전히 OriginalSource+originalSourceID를 가지고 다녀야 한다는 사실은 해결되지 않습니다.

도움을 주시면 감사하겠습니다.

도움이 되었습니까?

해결책

이 문제는 다음과 같은 EAI(Enterprise Application Integration) 공급업체에서 해결되었습니다. 팁코 그리고 웹방법 (현재 Software AG의 일부).저는 Tibco를 사용해 본 적이 없지만 이러한 문제를 해결하기 위해 webMethods를 사용한 적이 있으므로 webmethods에만 집중하겠습니다.예를 들어 기업에서는 직원에 대한 데이터가 Active Directory와 PeopleSoft에 모두 있을 수 있습니다.webMethods를 사용하면 한 시스템(애플리케이션)의 변경, 추가, 삭제가 다른 시스템에 실시간으로 반영되도록 할 수 있습니다.일부 다른 조직에서는 직원에 대한 데이터가 Oracle 또는 SQL Server 데이터베이스에 있을 수도 있습니다.다시 말하지만, 문제가 되지 않습니다.webMethods와 같은 EAI 도구는 다양한 백엔드와 통신할 수 있습니다.webMethods는 단일 소스와 단일 대상으로 제한되지 않지만 게시-구독 아키텍처를 갖기 때문에 단일 소스의 데이터가 특정 정보를 구독하는 관심 있는 여러 대상으로 흐를 수 있습니다.보장된 배송 및 기타 기능은 이 제품에서 찾을 수 있습니다.직원의 예로 돌아가서, 궁극적으로 올바르게 수행하면 언제든지 기업의 모든 시스템과 애플리케이션에 직원에 대한 동일한 정보가 불일치 없이 포함될 수 있습니다.

따라서 C#이나 Java로 프로그래밍하는 대신 4GL 언어와 매우 유사한 webMethods 프로그래밍을 수행하게 됩니다.여전히 논리, 루프, else, 분기, 변수, 패키지 등이 포함되어 있기 때문에 프로그래밍이라고 부르지만 이는 매우 절차 지향적입니다.OOP 개념이 전혀 없습니다.

이러한 EAI 도구는 제한된 목적을 염두에 두고 구축되었으며 그 목적 중 하나는 기업의 서로 다른 시스템 간에 데이터를 쉽게 동기화하는 것입니다.그리고 그들은 자신의 일을 아주 잘합니다.

단점은 이러한 도구에 많은 비용이 든다는 것입니다.기업에서는 이러한 도구에 투자하기 전에 장기적인 전략을 세우는 경우가 많습니다.

다른 팁

누군가 이미 쓴 것처럼 이것은 전형적인 EAI 문제처럼 들립니다.예전에는 EAI 도구가 비쌌지만 이제는 무료 오픈 소스 도구를 선택할 수 있는 폭이 넓습니다.내가 가장 좋아하는 목록 아래

  1. 오픈ESB
  2. 노새
  3. 아파치 서비스믹스
  4. 아파치 카멜

제가 가장 좋아하는 것은 OpenESB입니다. 제가 가장 잘 압니다. OpenESB는 완전한 IDE(Netbeans), 대규모 공급업체의 선택적 지원 및 엄청난 양의 추가 구성 요소.저는 단순함과 효율성 때문에 Apache Camel을 좋아하지만, 그 중 몇 가지를 시도해 보고 어느 것이 더 적합한지 결정할 수 있습니다.그런 다음 모든 항목에 대한 지원 서비스를 구매하기로 결정할 수도 있습니다.

우리는 당신이 설명하는 A -> B -> A 작업을 거의 정확하게 수행하고 있습니다.처음에는 A, B, C 등을 모두 피어로 지정하는 것을 고려했지만 너무 어려웠으므로 이제 하나를 마스터로 지정하고 나머지는 슬레이브로 지정합니다.한 슬레이브에서 다른 슬레이브로 물건을 가져오는 것은 여전히 ​​쉽지만 마스터를 통해서는 가능합니다.

모든 작업은 웹 서비스를 통해 수행됩니다. 데이터 세트는 슬레이브에서 마스터로 또는 그 반대로 올라가고 내려가며, 슬레이브는 자체적으로 내보내기를 실행하고 마스터에서 가져오기를 호출합니다.그런 다음 마스터에게 내보내기를 수행하라고 지시하고 자체적으로 가져오기를 실행합니다.

따라서 코드는 각 시스템에서 동일합니다.집으로 전화하는 것은 노예들뿐입니다.

내보내기 및 가져오기 프로세스는 관련 비즈니스 개체에 모든 항목 나열 및 저장 작업을 수행하도록 지시합니다. 왜냐하면 해당 비즈니스 개체는 DataRows에서 인스턴스화하고 유지하는 방법을 이미 알고 있기 때문입니다.

초당 수십 건의 트랜잭션을 처리하는 아키텍처는 아니지만 작동하며 거의 실시간 동기화를 달성할 수 있습니다.

그런데 소스/ID 고유성은 개선되지 않았습니다. :)

각 정보에 GUID를 할당하면 이는 매우 단순화됩니다.소스 및 기타 ID를 추적해야 하는 경우에는 괜찮지만 정보는 항상 할당된 GUID와 함께 이동해야 합니다.

컴퓨터가 해당 정보를 다시 보면 GUID를 확인하고 이를 기존 데이터와 연결한 다음 수행할 작업을 결정할 수 있습니다.그러나 당신은 그것이 동일한 데이터 조각이라는 것을 이미 알고 있습니다. 단지 더 잘 여행했을 뿐입니다.

GUID는 각 시스템이 자체적으로 생성하는 방식으로 생성되며 다른 시스템이나 다른 시간에 동일한 시스템에서 생성된 GUID와 충돌하지 않습니다(실질적인 의도 및 목적을 위해).

이것이 GUID가 만들어진 더 큰 이유 중 하나입니다.

-아담

이를 방지하는 시스템 설계에 특정 제한이 없는 한, 공유/공유 가능 정보를 다른 두 정보가 참조하거나 로컬로 복제할 수 있는 별도의 DB로 분리하는 것이 좋습니다.그러면 이중 요소 키나 정교한 ESB 장치가 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top