Always Lovely...

공지사항

2PC

HC.2PC 2009. 11. 9. 17:14

2PC (two-phase commit) ; 2단계 커미트

분산 컴퓨팅 환경에서 사용자의 트랜잭션을 처리하는데 있어, 트랜잭션 관리 프로그램은 트랜잭션에 관련된 모든 데이터베이스가 성공적으로 수정되었음을 확실하게 하기 위하여 2단계 커미트라고 불리는 프로토콜을 사용할 수 있다. 만일 데이터베이스의 수정이 성공적으로 이루어지지 않은 경우에, 그 트랜잭션은 롤백 상태가 되어 트랜잭션이 개시되기 이전의 상태로 되돌아간다. 만약 그 트랜잭션이 관련된 컴퓨터들에 의해 성공적으로 종료되었다면, 모든 데이터베이스의 수정을 위한 커미트가 이루어지며, 새로운 트랜잭션들이 자유로이 접근할 수 있도록 자원에 걸려 있던 로크들이 풀어진다.

 

아래에 이 프로토콜에 관한 간략한 설명이 있다.

  1. 한 컴퓨터 내에 있는 트랜잭션 관리 프로그램은 대체로 최초 요구에 연계되어, 관련된 모든 컴퓨터들을 대신하여 트랜잭션을 조정한다. 트랜잭션 관리 프로그램은 "트랜잭션 시작"이라는 내용을 로그 파일에 기재하고, 관련된 다른 컴퓨터들에게 트랜잭션 요청을 보낸다.
  2. 참여하고 있는 각 컴퓨터들은 자신의 로그에 트랜잭션을 기재하고, 다른 사용자가 쓸 수 없도록 데이터베이스 자원에 로크를 걸어 데이터베이스 변경을 수행하고, 트랜잭션 관리 프로그램에게 "커미트 할 준비가 되었다"는 메시지를 보낸다.
  3. 관리 프로그램은 관련된 모든 컴퓨터들로부터 "커미트 할 준비가 되었다"는 메시지를 받은 뒤에, 트랜잭션이 종료되었다는 사실을 로그 파일에 기재하고 나서, 모든 컴퓨터들에게 트랜잭션을 커미트 하라고 통보한다.
  4. 참여하고 있는 각 컴퓨터는 이 사실을 트랜잭션 로그 내에 기록한 다음, 자원에 걸려있던 로크를 풀어준다.
  5. 만약 모든 컴퓨터들이 트랜잭션을 커미트 하기 전의 어느 순간에 하나 이상의 컴퓨터에서 문제가 발생하면, 관리 프로그램은 트랜잭션이 시작되기 전의 상태로 되돌리도록 롤백 메시지를 전파한다.

응용 프로그래머에게 있어서의 2단계 커미트는 BEGIN, COMMIT, 그리고 필요한 경우 ROLLBACK 등의 프로그램 요청을 함으로써 구현된다.