더북(TheBook)

분산 트랜잭션은 간단해 보이지만 문제점도 많습니다. 일단 NoSQL DB(예: MongoDB, 카산드라(Cassandra))와 현대 메시지 브로커(예: RabbitMQ, 아파치 카프카)는 분산 트랜잭션을 지원하지 않으므로 분산 트랜잭션이 필수라면 최근 기술은 상당수 포기할 수밖에 없습니다.

동기 IPC 형태라서 가용성이 떨어지는 문제점도 있습니다. 분산 트랜잭션은 참여한 서비스가 모두 가동 중이어야 커밋할 수 있습니다. 3장에서 배웠듯이, 가용성은 트랜잭션 참여자의 가용성을 모두 곱한 값입니다. 99.5% 가용한 두 서비스가 참여한 트랜잭션의 전체 가용성은 99%로 개별 서비스 가용성보다 낮고, 더 많은 서비스가 참여할수록 가용성은 더 떨어집니다. 에릭 브루어(Eric Brewer)의 CAP 정리(theorem)에 따르면, 시스템은 일관성(consistency), 가용성(availability), 분할 허용성(partition tolerance) 중 두 가지 속성만 가질 수 있습니다.6 요즘 아키텍트들은 일관성보다 가용성을 더 우선시하는 편입니다.

개발자 관점에서 분산 트랜잭션은 로컬 트랜잭션과 프로그래밍 모델이 동일하므로 매력적이지만, 지금까지 설명한 문제점 때문에 요즘 애플리케이션에는 잘 맞지 않습니다. 분산 트랜잭션을 사용하지 않고 메시지를 DB 트랜잭션의 일부로 전송하는 방법은 3장에서 배웠습니다. 마이크로서비스 아키텍처에서 데이터 일관성을 유지하려면, 느슨하게 결합된 비동기 서비스 개념을 토대로 뭔가 다른 메커니즘이 절실합니다. 이것이 바로 사가입니다.

 

 


신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.