분산 트랜잭션

PARK JOOCHANG·2024년 8월 14일
0

분산 트랜잭션은 여러 개의 독립된 시스템이나 데이터베이스에서 동시에 일어나는 트랜잭션을 일관되게 관리하는 방법이다.

단일 트랜잭션이 여러 시스템에 걸쳐 발생할 때, 모든 시스템이 해당 트랜잭션을 성공적으로 완료하거나, 실패로 처리하도록 보장한다. 이를 통해 데이터 일관성을 유지할 수 있다.

분산 트랜잭션이 필요한 이유는 MSA에서 여러 서비스가 독립적으로 운영되기 때문이다.

주요 개념

트랜잭션

  • 데이터베이스의 상태를 변환하는 작업의 단위로, ACID 속성을 보장한다.
    - A : 원자성 (Atomicity)
    - 트랜잭션 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장한다.
    - All or Noting (모두 성공하거나, 아무 일도 없었던 것처럼 되돌리거나)
    - C : 일관성 (Consistency)
    - 트랜잭션이 성공적으로 완료되면 일관적인 DB 상태를 유지한다.
    - DB에 정의된 Rule(제약 조건)을 위반해서는 안된다.
    - I : 격리성 (Isolation)
    - 트랜잭션 작업 수행 중 다른 트랜잭션의 작업이 끼어들지 못하도록 보장한다.
    - DB 서버 퍼포먼스가 줄어들기 때문에 DBMS는 여러 종류의 isolation level을 제공한다.
    - D : 영속성 (Durability)
    - 성공적으로 수행된 트랜잭션은 영구적으로 반영돼야 한다.
    - 일반적으로 비휘발성 메모리에 저장함을 의미한다.

분산 트랜잭션

  • 여러 분산된 데이터 소스에 걸쳐 트랜잭션을 수행하는 작업이다. 여러 마이크로서비스나 데이터베이스에서 데이터를 동시에 업데이트하는 경우가 이에 해당한다.

2PC (Two-Phase Commit)

  • 분산 트랜잭션을 관리하는 프로토콜로, 준비(Prepare) 단계와 커밋(Commit) 단계로 나누어 트랜잭션을 처리한다.
    • 준비 단계(Prepare Phase): 각 참여 노드는 트랜잭션 준비 상태를 확인하고, 준비 완료를 마스터 노드에 알린다.
    • 커밋 단계(Commit Phase): 마스터 노드는 모든 참여 노드가 준비되었음을 확인하고, 트랜잭션을 커밋하도록 지시한다. 만약 준비가 완료되지 않은 노드가 있다면 트랜잭션을 롤백

사가 패턴(Saga Pattern)

  • 트랜잭션을 여러 단계로 나누어 처리하고, 각 단계가 독립적으로 커밋된다. 실패 시 보상 트랜잭션을 실행하여 상태를 롤백
    - 주문 생성 단계: 사용자가 주문을 생성
    - 결제 처리 단계: 결제 서비스가 주문 결제를 처리
    - 재고 감소 단계: 재고 서비스가 주문된 상품의 재고를 감소
    - 각 단계가 성공적으로 완료되면 다음 단계로 넘어가고, 실패하면 이전 단계에서 수행된 작업을 취소

이벤트 소싱(Event Sourcing)

  • 상태 변화를 이벤트로 기록하고, 해당 이벤트를 재생하여 현재 상태를 유지한다. 이를 통해 분산 트랜잭션의 일관성을 유지할 수 있다.

분산 트랜잭션의 장점

  • 데이터 일관성 보장:
    - 분산된 여러 데이터 소스에 걸쳐 일관된 데이터 상태를 유지할 수 있다. 모든 트랜잭션이 성공적으로 완료되거나 모두 실패하도록 보장한다.
  • 확장성:
    - 분산 트랜잭션을 통해 여러 시스템이 독립적으로 동작하면서도, 필요한 경우 협력하여 일관된 상태를 유지할 수 있다. 이를 통해 시스템의 확장성을 높일 수 있다.
  • 신뢰성:
    - 트랜잭션의 ACID 속성을 분산 환경에서도 유지할 수 있어 시스템의 신뢰성을 높입니다. 데이터 무결성과 일관성을 유지할 수 있다.
  • 복구 가능성:
    - 트랜잭션 실패 시 롤백 메커니즘을 통해 상태를 복구할 수 있어, 시스템 안정성을 높일 수 있다.

분산 트랜잭션의 단점

  • 복잡성 증가:
    - 분산 트랜잭션을 구현하고 관리하는 것은 복잡하다. 특히, 여러 시스템 간의 트랜잭션 동기화와 데이터 일관성을 유지하는 것은 어려운 작업이다.
  • 성능 저하:
    - 2PC와 같은 프로토콜을 사용할 경우, 트랜잭션의 준비와 커밋 단계에서 지연이 발생할 수 있다.
  • 네트워크 오버헤드:
    - 여러 시스템 간의 통신이 필요하므로 네트워크 오버헤드 증가
  • 복구의 어려움:
    - 분산 트랜잭션 실패 시, 모든 시스템에서 일관된 상태로 롤백하는 것이 어려울 수 있다.
profile
모르면 알고 넘어가자

0개의 댓글

관련 채용 정보