문제

우리는 시스템 A가 시스템 B로 데이터를 전송하는 두 가지 시스템이 있습니다. 각 시스템은 다른 시스템과 독립적으로 실행할 수 있으며 다른 시스템이 다운되면 폭발하지 않아야합니다. 문제는 시스템 A가 디커플링 요구 사항을 충족하면서 시스템 B와 통신하는 가장 좋은 방법입니다.

시스템 B에는 현재 DB 테이블로 데이터를 폴링하고 삽입 된 새 행을 처리하는 프로세스가 있습니다.

제안 된 디자인 중 하나는 시스템 A가 시스템 B의 DB 테이블에 데이터를 삽입하고 시스템 B가 기존 프로세스에 의해 새 행을 처리하도록하는 것입니다. 질문은이 솔루션이 두 시스템을 분리 해야하는 요구 사항을 충족합니까? 데이터베이스가 시스템 B의 일부로 간주되어 사용할 수없고 시스템 A가 폭발 할 수 있습니까?

또 다른 솔루션은 시스템 A가 데이터를 MQ 큐에 넣고 MQ에서 읽은 다음 시스템 B의 데이터베이스에 삽입하는 프로세스를 갖는 것입니다. 그러나 이것은 단지 여분의 오버 헤드입니까? 궁극적으로 MQ 대기열은 DB 테이블보다 더 많은 결함이 있습니까?

도움이 되었습니까?

해결책

일반적으로, 데이터베이스 공유는 긴밀한 커플 링이며 속도 목적을 제외하고는 선호되지 않습니다. 가용성 목적뿐만 아니라 시스템 A와 B가 향후 여러 지점에서 변경되고 업그레이드되기 때문에 서로에 대한 의존성이 최소화되어야합니다. 메시지 전달은 명백한 종속성이지만 공유 데이터베이스는 귀하 (또는 또는 물린 경향이 있습니다. 당신의 상속자)) 예상치 못한 후 후부. 데이터베이스 공유 경로를 사용하는 경우 최소한 전용 테이블 또는 뷰로 공유 인터페이스를 명시 적으로 만듭니다.

4 가지 공통 통합 수준이 있습니다.

  1. 데이터베이스 공유
  2. 파일 공유
  3. 원격 절차 호출
  4. 메시지 전달

다양한 상황에서 적용 및 결합 할 수 있으며 다양한 가용성과 유지 관리 가능성이 있습니다. 당신은 다음에 훌륭한 개요를 가지고 있습니다 엔터프라이즈 통합 패턴 사이트.

중앙 통합 인프라와 마찬가지로 MQ는 가용성이 뛰어난 환경에서 호스팅되어야합니다. 큐 조정을 배포 할 수있는 다른 큐 솔루션이 있습니다.

다른 팁

커뮤니케이션에 대기열을 사용하십시오. 데이터베이스를 통해 시스템 A에서 시스템 B로 데이터를 "전달"하지 마십시오. 데이터베이스를 거대한 비싸고 복잡한 메시지 대기열로 사용하고 있습니다.

메시지 큐를 메시지 큐로 사용하십시오.

이것은 "추가"오버 헤드가 아닙니다. 이것은 시스템을 해체하는 가장 좋은 방법입니다. SOA (Service Oriented Architecture)라고하며 메시지 사용은 디자인의 중심입니다.

MQ 대기열은 DB 테이블보다 훨씬 간단합니다.

RDBMS는 거대한 (거의 상상할 수없는) 오버 헤드를 사용하여 거래가 제대로 완료되었다는 합리적인 수준의 보증을 달성하기 때문에 "결함 공차"를 비교하지 마십시오. 잠금. 버퍼링. 대기열을 작성하십시오. 스토리지 관리. 기타 등

신뢰할 수있는 메시지 큐 구현은 일부 후원 저장소를 사용하여 큐의 상태를 유지합니다. 오버 헤드는 RDBM보다 훨씬 작습니다. 성능이 훨씬 좋습니다. 그리고 상호 작용하는 것이 훨씬 간단합니다.

SQL Server에서는 SSIS 패키지 또는 작업을 통해이를 수행합니다 (레코드의 수와 이동중인 것의 복잡성에 따라 다름). 다른 데이터베이스에는 ETL 솔루션도 있습니다. 나는 변경된 내용과 처리 된 오류에 대한 로그를 유지할 수 있기 때문에 ETL 솔루션을 좋아합니다. 어떤 이유로 다른 시스템으로 가지 않을 레코드 (데이터 구조는 두 데이터베이스 사이에 거의 동일하지 않음)를 보유하고 있습니다. 나머지 과정을 죽이지 않고 테이블. 또한 데이터베이스 차이를 조정하기 위해 흐르는 데이터를 변경할 수 있습니다 (조회 테이블 값, DB1의 완성 된 상태는 5이고 DB2의 7 또는 DB2가 DB1이하지 않는 필수 필드가 있다고 가정합니다. 신고서에 기본값을 추가해야합니다. 하나 또는 다른 서버가 작업을 수행하는 경우 SSIS 패키지가 실패하고 시스템이 영향을받지 않으므로 트리거 또는 복제를 사용하지 않는 경우 Datbases가 디퍼링되는 상태를 유지합니다.

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