User, Wallet REST 마이크로 서비스 및 사물을 서로 연결하는 API 게이트웨이가 있다고 가정 해 봅시다. Bob이 웹 사이트에 등록 할 때 API 게이트웨이는 사용자 마이크로 서비스를 통해 사용자를 생성하고 월렛 마이크로 서비스를 통해 지갑을 생성해야합니다.
다음은 상황이 잘못 될 수있는 몇 가지 시나리오입니다.
사용자 Bob 작성에 실패했습니다. 괜찮습니다. 오류 메시지를 Bob에게 리턴합니다. 우리는 SQL 트랜잭션을 사용하므로 아무도 시스템에서 Bob을 보지 못했습니다. 모든 것이 좋다 :)
사용자 Bob이 생성되었지만 월렛을 생성하기 전에 API 게이트웨이가 충돌합니다. 이제 지갑이없는 사용자가 있습니다 (일관되지 않은 데이터).
사용자 Bob이 생성되고 월렛을 생성 할 때 HTTP 연결이 끊어집니다. 지갑 작성에 성공했거나 실패했을 수 있습니다.
이러한 종류의 데이터 불일치가 발생하지 않도록하기 위해 어떤 솔루션을 사용할 수 있습니까? 트랜잭션이 여러 REST 요청으로 확장 될 수있는 패턴이 있습니까? 이 문제를 다루는 2 단계 커밋 의 Wikipedia 페이지를 읽었 지만 실제로 적용하는 방법을 잘 모르겠습니다. 이 Atomic Distributed Transactions : RESTful 디자인 용지도 아직 읽지 않았지만 흥미로워 보입니다.
또는 REST가이 사용 사례에 적합하지 않을 수도 있다는 것을 알고 있습니다. 이 상황을 처리하여 REST를 완전히 삭제하고 메시지 큐 시스템과 같은 다른 통신 프로토콜을 사용하는 올바른 방법일까요? 또는 애플리케이션 코드에서 일관성을 유지해야합니까 (예를 들어, 불일치를 감지하고 수정하는 백그라운드 작업 또는 "만들기", "만든"값 등으로 사용자 모델에 "상태"속성을 가짐)?