1

나는 두 개의 mico-serives A와 B를 별도의 데이터베이스에 연결한다. Mico-serives에서 A와 B의 객체를 동일한 트랜 슬 레이션에 저장 (저장)해야한다.2 개의 마이크로 서비스 (스프링 부트)간에 2 단계 커밋을 수행하는 방법은 무엇입니까?

나는 netflix-oss와 함께 스프링 마이크로 서비스를 사용하고 있습니다. 2 단계 커밋을 수행하는 가장 좋은 방법에 대한 제안을하십시오.

답변

3

분산 환경에서 마이크로 서비스에 기존 트랜잭션 시스템을 구현할 수 없습니다.

당신은 이벤트 소싱 + CQRS 기술을 사용해야하며 원자 적이기 때문에 트랜잭션을 구현하거나 모 놀리 식 시스템에서 2PC를 얻을 수 있습니다.

다른 가능한 방법은 링크드 인이 이런 식으로 사용한다고 생각하는 트랜잭션 로그 마이닝이지만 자체의 장단점이 있습니다. 예를 들어 다른 데이터베이스의 바이너리 로그는 다르며 같은 종류의 데이터베이스에있는 이벤트는 다른 버전간에 차이가 있습니다.

나는 다음 상태를 마이크로 서비스 A와 B 사이에 여러 이벤트를 전송하고 도메인을 업데이트 한 후 최종 일관성을 CAP 정리 기지에 도달하려고하면 이벤트 매장에서 이벤트 소싱 + CQRS 및 문자열 이벤트를 사용하는 것이 좋습니다 각 단계에서.

당신이 MySQL의 또는 다른 시스템과 같은 이벤트 저장소에 다른 microservices 및 문자열을 사이에 이벤트 소스 이벤트를 보내는 또는 카프카ActiveMQ를, RabbitMQ 같은 메시지 브로커를 사용하는 것이 좋습니다.

트랜잭션을 모방하는 것과 같은 또 다른 이점은 감사 로그을 갖게된다는 것입니다.

+0

감사합니다. – sathees

+0

환영합니다. –

+0

이 스레드로 저를 도울 수 있습니까? https://stackoverflow.com/questions/44063886/how-to-achieve-orchestration-with-spring-boot-micro-service – sathees

1

아키텍처 (마이크로 서비스) 문제입니다. 스프링 부트 또는 netflix-oss는 직접적인 해결책을 제공하지 않습니다. 당신은 당신 자신의 솔루션을 구현해야합니다. event driven architecture으로 확인하십시오. 그것은 당신에게 몇 가지 아이디어를 줄 수 있습니다.

관련 문제