중앙 집중식 시스템에서 분산 시스템이로 변경할때 직면하는 가장 일반적인 문제중 하나는 여러 노드에 걸쳐 원자적으로 작업을 수행한다는 것이다. 이를 분산 트랜잭션 이라고 부른다.
Transactions
트랜잭션은 데이터베이스 시스템내에서 잠재적으로 여러 작업으로 구성되어 상태의 변경을 나타내는 작업 단위이다.
ACID 는 트랜잭션 예상 동작에 대한 보장을 제공하는 데이터베이스의 트랜잭션의 속성 집합니다. 이러한 ACID에 대한 내용을 분산 시스템에도 어느정도 대입할 수 있다.
Atomicity (A)
원자성은 여러 작업으로 구성된 트랜잭션이 단일 단위로 처리되도록 보장하며, 이는 트랜잭션의 모든 작업이 수행되거나 아무 것도 수행되지 않음을 의미한다.
이러한 원자성 개념은 시스템의 여러 노드에서 동일한 작업을 실행해야 하는 분산 시스템으로 확장된다. 즉, 작업은 모든 노드에 대해 실행되거나 전혀 실행되지 않아야 한다.
Consistency (C)
일관성은 데이터베이스 불변성을 유지하면서 트랜잭션이 데이터베이스를 하나의 유효한 상태에서 다른 유효한 상태로만 전환하는 것을 보장한다.
Isolation (I)
격리는 트랜잭션이 동시에 실행되고 데이터 종속성이 있더라도 그 결과가 마치 트랜잭션 중 하나가 한 번에 실행되고 트랜잭션 간에 간섭이 없는 것처럼 보장한다.
Durability (D)
내구성은 한번 커밋된 트랜잭션이 실패하더라도 커밋된 상태를 유지하도록 보장한다.
분산 시스템의 맥락에서 이는 트랜잭션이 여러 노드에 지속적으로 저장되어야 함을 의미한다. 이는 저장 시설과 함께 노드 전체에 장애가 발생하는 경우에도 복구가 가능하게 한다.
어플리케이션에서 ACID의 의미
원자성은 어플리케이션이 가능한 모든 오류를 처리할 필요는 없지만, 발생해서는 안 되는 작업을 롤백하여 부분적인 오류가 발생한 경우 데이터베이스를 일관된 상태로 되돌리는 조건부 논리를 가지고 있음을 의미한다.
일관성을 사용 하면 선언적 방식으로 어플리케이션의 불변성을 명시하고 어플리케이션에서 중복 코드를 제거하고 필요할 때마다 데이터베이스가 이러한 검사를 수행할 수 있다.
격리를 통해 어플리케이션은 동시 실행을 활용하고 트랜잭션을 병렬로 실행하여 여러 요청을 처리할 수 있으며 데이터베이스가 동시 실행으로 인한 버그를 방지한다는 확신을 가질수 있게 된다.
내구성은 데이터베이스가 커밋된 트랜잭션을 선언할 때 되돌릴 수 없는 최종 선언임을 보장한다.
분산 트랜잭션
분산 트랜잭션은 두 개 이상의 서로 다른 노드에서 발생하는 트랜잭션 이다.
분산 트랜잭션에는 약간 다른 두 가지 변형이 있다.
- 동일한 데이터 조각이 여러 복제본에서 업데이트되어야 함
- 서로 다른 노드에 있는 서로 다른 데이터 조각을 원자적으로 업데이트해야 함
참고