본문 바로가기
개발/MSA

[MSA] 분산 트랜잭션 최종 일관성(Eventual Consistency) 구현 방법 비교

by 궁즉변 변즉통 통즉구 2024. 8. 11.
반응형

MSA에서 서비스의 성능, 가용성, 유연성 등의 이유로 강력한 동기화 대신 최종 일관성(Eventual consistency)이라는 방법으로 데이터를 동기화하는 방법을 많이 사용한다. 최종 일관성을 구현하는 패턴들을 알아보고, 각각의 장단점을 알아본다. 

 

최종 일관성(Eventual consistency) 구현 방법

1. 백그라운드 동기화 패턴

  • 외부의 서비스 또는 프로세스가 데이터 소스를 주기적으로 체크해서 데이터 소스를 서로 동기화 하는 방법
  • 데이터 동기화를 위한 시간이 가장 긴 편(배치Job, 주기적 실행 등)
  • 백그라운드 프로세스는 트랜잭션에 포함된 테이블과 데이터 소스를 알고 있어야 하고, 어떤 데이터가 변경됐는지 알아야 함
  • 백그라운드 프로세스는 이벤트 스트림, 데이터베이스 트리거, 원본/타깃 테이블 비교 방법 등으로 데이터 변경 판단 수행
  • 서로 아무런 통신없고, 데이터 공유도 없는 폐쇄적인 자기 완비형 시스템에 적합(분산 아키텍처에는 적합하지 않은 편)

출처: 소프트웨어 아키텍처 The Hard Parts

장점 단점
 서비스 간 디커플링 가능  서비스와 백그라운드 간의 데이터 소스 결합
 응답성이 좋음
 (백그라운드 실행으로 앤드 유저단의 기다림이 없음)
 비즈니스 로직이 서비스와 백그라운드 프로세스에 중복 발생 가능
 비즈니스 로직에 따라 백그라운드 구현 복잡도 증가
   바운디드 컨텍스트가 깨짐
   최종 일관성을 위한 시간이 많이 걸림

 

2. 오케스트레이티드(Orchestrated) 기반 패턴

  • 비즈니스 요청 처리 시 오케스트레이터가 전체 분산 트랜잭션을 관리하는 방법
  • 오케스트레이터는 서비스 중 하나를 지정할 수 있고, 별도 서비스로 생성 가능
    (서비스 중 하나를 지정하는 방법은 서비스 기능에 별도 오케스트레이터 기능까지 포함되어 과부화 및 서비스간 커플링 발생 가능)
  • 응답성, 에러처리 등 복잡도 증가됨

특정 서비스가 오케스트레이터가 됨(좌측 그림) / 별도 오케스트레이터를 생성(우측 그림), 출처: 소프트웨어 아키텍처 The Hard Parts

 

장점 단점
 서비스 간 디컬링 가능  느린 응답
 데이터를 적시에 동기화 가능  복잡한 에러 처리
 원자적 비즈니스적 요청 가능  대부분 보상 트랜잭션이 필요함

 

3. 이벤트 기반 패턴

  • 요즘 가장 인기있고 믿음직한 패턴
  • 비동기 메시지 처리로 최종 일관성 맞춰지는 시간이 짧아짐
  • 응답성 우수, 서비스 간 디커플링, 적시의 데이터 일관성 가능
  • 에러처리의 복잡도 증가(메시지 큐의 Dead Letter Queue 활용, 수작업 필요할수도 있음)

출처: 소프트웨어 아키텍처 The Hard Parts

장점 단점
 서비스 간 디커플링 가능  복잡한 에러 처리
 데이터를 적시에 동기화 가능  
 빠른 응답성  

 

관련글:

https://happy-jjang-a.tistory.com/321

반응형

댓글