등장배경
글로벌 서비스 혹은 다중 지역 서비스의 어려움
- 한 지역에 서버를 두고 서비스하게 되면 먼 거리의 사용자는 높은 latency 문제를 겪게된다.
- 여러 지역에 서버를 두게 되면 데이터 일관성 문제가 발생할 소지가 있다. → 높은 latency에 의해 발생
개념
- 지역적으로 분산된 글로벌 데이터베이스를 유지하면서, 여러 위치에서 동일한 데이터에 대한 읽기/쓰기를 허용한다. → Replica 구조가 아닌, multi-master 구조이다.
특징
- 지역적으로 빠른 latency를 확보하면서도 데이터 일관성을 유지할 수 있다. → 각 지역의 데이터베이스가 어떻게 sync하는지가 Active-Active 아키텍처의 핵심이다.
- CRDT를 활용하여 자동으로 데이터 충돌을 방지하고 각 데이터베이스 끼리 sync를 한다.
- CRDT를 구현하여 여러 클러스터에 연결되어 글로벌 데이터베이스를 이루는 것을 CRDB라 한다.
장점
- 분산된 지역의 수에 상관없이 낮은 lateny로 읽기/쓰기 작업을 수행할 수 있다.
- CRDT를 이용하여 데이터 일관성을 해치지 않으며 매끄러운 충돌 해결이 가능하다. (일관성)
- CRDB의 다수 인스턴스(지역DB)에 장애가 발생하더라도 서비스를 지속할 수 있다. (지속성)
CRDTs
- 분산 환경에서 여러 노드들 간에 복제되는 데이터 구조이다.
- 각 노드는 로컬에서 독립적으로 데이터를 업데이트 할 수 있다.
- 노드간에 발생하는 데이터 충돌은 해당 데이터 타입에 맞는 알고리즘에 의해 해결된다.
- 동일 데이터에 대해 노드들은 일시적으로 다른 값을 가질 수 있지만 최종적으로 하나의 값 만을 갖게된다.
- 2011년에 등장한 개념으로, 문서 공동 편집 문제를 해결하기 위해 등장하였다.
충돌 해결 과정
- 각 CRDB 인스턴스는 각자의 데이터셋에 vector clock을 유지한다. (vector clock : 데이터 일관성 관리를 위한 버전 정보)
- 동기화 요청이 왔을 때 vector clock을 비교하여 old, new, concurrent를 분류한다.