궁극적 일관성
1. 개요
궁극적 일관성은 분산 데이터 시스템에서 여러 복제본 간의 일관성을 유지하기 위한 개념으로, 충돌 해결과 강력한 최종 일관성(SEC)을 포함한다. 충돌 해결은 데이터 버전 교환(안티 엔트로피)과 동시 업데이트 시 최종 상태 선택(조정)으로 구성되며, "최종 작성자 우선", 사용자 지정 충돌 처리기, 타임스탬프, 벡터 시계 등을 활용한다. 조정은 읽기, 쓰기, 비동기 복구 시점에 수행될 수 있다. SEC는 동일한 업데이트 집합을 받은 노드들이 동일한 상태가 되도록 보장하며, 단조성을 통해 롤백을 방지한다. SEC는 충돌 없는 복제 데이터 유형(CRDT)을 통해 구현될 수 있다.
이미지 준비중입니다.
| 유형 | 일관성 모델 |
|---|
| 장점 | 낮은 지연 시간 높은 가용성 분할 내성 |
|---|---|
| 단점 | 읽기 일관성 보장 없음 충돌 해결 필요 |
| 관련 개념 | ACID |
|---|---|
| 반대 개념 | 강한 일관성 |
| 예시 | DNS 이메일 시스템 |
|---|---|
| 사용 시스템 | Amazon DynamoDB Apache Cassandra Couchbase Riak |
| 참고 자료 | Vogels, W. (2009). Eventually consistent. Communications of the ACM, 52(1), 40–44. Vogels, W. (2008). Eventually Consistent. Queue, 6(6), 14–19. Terry, D. B., Theimer, M. M., Petersen, K., Demers, A. J., Spreitzer, M. J., & Hauser, C. H. (1995). Managing update conflicts in Bayou, a weakly connected replicated storage system. Proceedings of the fifteenth ACM symposium on Operating systems principles - SOSP '95, 172. Petersen, K., |
|---|
2. 충돌 해결 (Conflict Resolution)
분산 시스템에서 복제본의 일관성을 유지하기 위해서는 여러 복제본 간의 데이터 차이를 조정해야 한다. 이 과정을 조정이라고 하며, 안티 엔트로피와 함께 복제본 일관성을 보장하는 핵심 요소이다.
조정 방식은 응용 프로그램에 따라 달라지는데, "최종 작성자 우선", 사용자 지정 충돌 처리기 호출, 타임스탬프 및 벡터 시계를 이용한 동시성 감지 등의 방법이 사용된다. "최종 작성자 우선" 방식이 허용되지 않을 때는 "최초 작성자 우선" 방식을 사용하기도 한다.
동시 쓰기 조정은 다음 읽기 전에 수행되어야 하며, 읽기 복구, 쓰기 복구, 비동기 복구 등의 시점에 예약될 수 있다.
2.1. 안티 엔트로피 (Anti-entropy)
복제본의 일관성을 보장하기 위해 시스템은 분산된 데이터의 여러 사본 간의 차이점을 조정해야 한다. 이는 다음 두 부분으로 구성된다.
* 서버 간 데이터의 버전 또는 업데이트를 교환하는 것 (종종 안티 엔트로피라고 함)
* 동시 업데이트가 발생했을 때 적절한 최종 상태를 선택하는 것 (이를 조정이라고 한다)
2.2. 조정 (Reconciliation)
복제본의 일관성을 보장하기 위해 시스템은 분산 데이터의 여러 사본 간의 차이점을 조정해야 한다. 이는 서버 간 데이터의 버전 또는 업데이트를 교환하는 것(안티 엔트로피)과 동시 업데이트가 발생했을 때 적절한 최종 상태를 선택하는 과정으로 구성된다.
2.2.1. 조정 방식
조정에 가장 적합한 접근 방식은 응용 프로그램에 따라 다르다. 널리 사용되는 접근 방식은 "최종 작성자 우선"이다. 또 다른 방법은 사용자가 지정한 충돌 처리기를 호출하는 것이다. 타임스탬프와 벡터 시계는 업데이트 간의 동시성을 감지하는 데 자주 사용된다. 일부 사람들은 "최종 작성자 우선"이 용납될 수 없는 상황에서 "최초 작성자 우선"을 사용한다.
2.2.2. 조정 시점
동시 쓰기의 조정은 다음 읽기 전에 수행되어야 하며, 다른 시점에 예약될 수 있다.
* 읽기 복구: 읽기에서 불일치가 발견될 때 복구를 수행한다. 읽기 작업이 느려질 수 있다.
* 쓰기 복구: 쓰기 작업 중에 복구를 수행한다. 쓰기 작업이 느려질 수 있다.
* 비동기 복구: 읽기 또는 쓰기 작업과 별개로 복구를 수행한다.
3. 강력한 최종 일관성 (Strong Eventual Consistency)
강력한 최종 일관성(Strong Eventual Consistency, SEC)은 생존성 보장(업데이트는 결국 관측됨)에 더해, 동일한 (순서가 지정되지 않은) 업데이트 집합을 수신한 두 노드가 동일한 상태가 된다는 안전성 보장을 추가한다.
3.1. 특징
동일한 업데이트 집합을 수신한 모든 노드는 결국 동일한 상태에 도달한다. 시스템이 단조성을 가질 경우, 애플리케이션은 롤백을 겪지 않는다. 이러한 특징을 보장하기 위한 일반적인 접근 방식은 충돌 없는 복제 데이터 유형이다.
3.2. 구현
결국 일관성은 단지 생존성 보장(업데이트는 결국 관찰될 것임)일 뿐이지만, 강력한 최종 일관성(Strong Eventual Consistency, SEC)은 동일한 (순서가 없는) 업데이트 집합을 수신한 두 노드는 동일한 상태가 될 것이라는 안전성 보장을 추가한다. 또한 시스템이 단조성을 가진다면, 애플리케이션은 롤백을 겪지 않을 것이다. SEC를 보장하는 일반적인 접근 방식은 충돌 없는 복제 데이터 유형이다.