본문 바로가기
CS공부

Two-phase commit 이란?(2PC)

by 티코딩 2024. 10. 16.

최근 회사에서 프로젝트를 진행하면서 배포에서 문제를 겪었다. 정확히는 내가 로컬에서 코드를 고치고 커밋하고 푸쉬까지 하면 SourceTree에서 보이긴 하지만 배포할때 쓰이는 이미지엔 반영이 안되는것이었다. 내가 고전하고 있을 때 대표님이 로컬에서만 푸쉬한거아냐? 원격저장소에도 푸쉬를 해야지~ 라고 하시고 2pc 에 대해 공부해오라는 과제를 내주셨다. 먼저 2pc에 대해 간단하게 알아보자.

 

Two-phase commit이란?

MSA, 분산 데이터베이스, 분산 파일 시스템과 같은 분산 트랜잭션 환경에서 데이터의 일관성을 유지시켜 줄 수 있는 트랜잭션 관리 프로토콜이다. 정처기 할때 공부했던 트랜잭션의 ACID 특징중 원자성(Atomicity)을 보장 해준다는 것이다. 뿐만 아니라 데이터의 일관성과 무결성도 보장해준다.

분산 시스템에서 여러 데이터베이스가 참여하는 트랜잭션을 수행 할 때, 각 데이터베이스가 성공적으로 트랜잭션을 수행했는지 확인해야 한다.  그렇지 않으면 데이터가 뒤죽박죽이 될 가능성이 높다.

Two-phase commit의 구성요소

Coordinator(조정자) : 트랜잭션을 관리하고 참여자들에게 상태를 요청하고 최종적으로 커밋할지, 롤백할지를 지시한다.

Participants(참여자) : 트랜잭션의 일부를 처리하는 노드로, 각 참여자들은 조정자의 명령에 따라 트랜잭션을 처리한다.

 

Two-phase commit의 프로세스

1.  Prepare 단계

  1. Coordinator가 트랜잭션 시작: 트랜잭션이 시작되면 조정자는 트랜잭션에 참여하는 모든 참여자에게 트랜잭션 준비 요청을 보낸다.  “CanCommit?” 메시지로 표현됨.
  2. Participants가 준비 상태 확인: 각 참여자는 자신이 트랜잭션을 커밋할 수 있는 상태인지 확인합니다. 이때 참여자는 트랜잭션이 성공적으로 처리될 수 있을지를 검토한 후, 로컬에서 트랜잭션을 일시적으로 기록하고 트랜잭션 로그에 저장한다.
  3. Participants의 응답: 모든 참여자들은 트랜잭션을 처리할 수 있으면 Yes 응답을 조정자에게 보내고, 처리할 수 없는 상황이면 No 응답을 보낸다.
  4. Coordinator의 결정: 모든 참여자로부터 응답을 바등면 조정자는 결과를 검토한다. 모든 응답이 Yes면 커밋을 결정하고, 하나라도 No가 나오면 롤백을 결정하게 된다.

2. Commit 단계

  1. Coordinator가 커밋 또는 롤백 명령 전송: 위에서 결정한 결과대로 커밋 또는 롤백 명령을 전송하게 된다.
  2. Participants의 처리:
    • Commit 명령을 받은 참여자는 트랜잭션을 실제로 적용하고, 완료되면 조정자에게 통보한다.
    • Rollback 명령을 받은 참여자는 트랜잭션을 취소하고, 조정자에게 롤백이 조정자에게 통보합니다.
  3. Coordinator의 최종 완료 확인:
    • 모든 참여자로부터 커밋 또는 롤백이 완료되었다는 확인을 받으면, 트랜잭션이 완료되었음을 기록하고 종료한다.

 

Two-phase commit의 한계

참여자가 응답을 안하면 무한 대기할 수 도 있고, 만약 중재자가 에러가 나면 트랜잭션 전체가 중단될 수 도 있고, 네트워크의 지연 및 성능저하가 일어날 수 도 있다.

 

 

MSA에서 의 Two-phase commit

MSA에선 여러 독립된 마이크로서비스가 각각 자체 데이터베이스를 가지고 있을 수 있다. 각 서비스는 독립적으로 운영되는데, 가끔 어떤 트랜잭션은 여러 서비스에 걸쳐서 수행되어야 할 때가 있다. 이때 각 서비스가 데이터 일관성을 유지하면서 트랜잭션을 완료하려면 분산 트랜잭션 관리가 필요하고, 이 때 Two-phase commit 프로토콜을 쓸 수 있다.

하지만 MSA에서 2PC는 잘 사용되지 않다고 한다. 왜냐면 2PC가 성능 및 복잡성 문제를 야기할 수도 있고, MSA의 가장 큰 장점 중 하나인 서비스 독립성이 약화될 수 있다고 한다. MSA에서는 비동기적인 트랜잭션 관리 기법이 더 자주 사용된다고 한다.

 

출처:https://www.youtube.com/watch?v=gVp7N-mfhs8

 

'CS공부' 카테고리의 다른 글

Spring Cloud - MSA  (7) 2024.10.20
supabase? 가 뭘까? 맛좀 보자.  (3) 2024.10.18
MSA 구조에대해  (0) 2024.06.19
SQL 복습, HTTP 복습 - 그냥 기록용  (0) 2024.01.26
기본기 닦기(5) - API,Rest API  (2) 2024.01.03