0

레거시 ACID 시스템과 최종 일관성 시스템을 혼합하기위한 패턴이 있습니까?최종 일관성 시스템 및 레거시 ACID 시스템 혼합

ACID와 같은 트랜잭션이 필요한 메인 프레임의 일부 (최소 2 개) 레거시 시스템에 데이터를 저장하려고합니다. 이러한 메인 프레임 데이터베이스 (OldWorld라고 부르 자)는 동일한 프로세스에서 동일한 트랜잭션 관리자로 실행되므로 메인 프레임 시스템의 일관성은 문제가되지 않습니다.

mainframe-tm과 비 메인 프레임 환경에서 ACID 가능 관계형 데이터베이스 (이 NewWorld를 호출합시다)에서 XA- 트랜잭션을 처리 할 수있는 트랜잭션 관리자가 있습니다. 하지만 XA 트랜잭션을 사용하고 싶지는 않습니다. 메인 프레임 측에서 장시간 실행되는 잠금 문제가 자주 발생하고 많은 경우에 두 가지 모든 ACID 기능을 필요로하지 않기 때문입니다. 나는 항상 일관된 메인 프레임을 원한다. (올드 월드의 모든 데이터는 올드 월드 내부에서 일관성이있다.) NewWorld 시스템은 메인 프레임 측에서 데이터를 읽을 때 일치하지 않는 데이터 (New와 Old 사이의 불일치)를 처리 할 수 ​​있습니다. OldWorld에서 데이터를 저장하는 데 사용되는 작업은 간단하며 기능적으로 실패 할 수없는 "추가 전용 작업"을 저장합니다 (기술적으로는 실패 할 수 있지만 항상 일시적인 실패 임).

답변

0

분산 트랜잭션의 필요성을 해결하기위한 나의 아이디어는 OldWorld의 데이터를 비동기 적으로 업데이트하고 NewWorlds의 이벤트 소싱 데이터 계층을 사용하여 OldWorld에서 수행해야 할 정보를 저장하는 것입니다. Old-World에 이중 제출을 방지하기 위해 "soft-transaction-id 's"를 사용합니다. 이러한 "소프트 트랜잭션 ID"는 올드 월드에서 수행해야하는 트랜잭션의 이벤트 소싱 데이터 계층에 데이터를 저장하는 동안 생성됩니다.

"Soft-transaction-id 's"를 OldWorld-Databases에 추가하는 변경이 없지만 "완료"데이터를 저장할 수있는 새 데이터베이스를 추가 할 수 있습니다. - "soft-transaction-id "이 데이터베이스의 업데이트를 구세계 거래의 일부로 만든다. 그런 다음 다른 비동기 프로세스는 잠금없이 상태 정보를 읽고 NewWorld를 업데이트 할 수 있습니다 (예 : 이벤트 저장소 저장소의 데이터로 관계형 모델 업데이트). 소프트 트랜잭션 ID를 완료로 표시 ("전역 일치")) OldWorld의 업데이트는 항상 soft-transaction-id가 항상 먼저 커밋되었는지 확인합니다.

필자가 저술을 통해 읽었을 때, 잠금이 덜한 글로벌 트랜잭션과 같은 느낌을 받았다. 올드 월드에 대한 나의 업데이트가 기능적으로 성공할 것이라는 지식은 필수적입니다. 기능적 갈등을 처리 할 수있는 수동 병합 프로세스가 필요하지 않습니다. NewWorld 시스템은 일관성없는 전역 상태를 처리하는 기능이 필요합니다. 관계형 데이터베이스를 읽고 OldSystem DataRequests를 아직 완료하지 않은 (OldWorld-Database) 이벤트 저장소를 분석하여 모방 할 수 있습니다. 다른 모든 트랜잭션의 경우 잠금 동작과 함께 분산 트랜잭션을 사용해야합니다.