A-서울, master
B-부산, 복제
C-제주, 복제
위와 같은 지역에 데이터 센터를 운영한다면 가까운 지역의 DB를 사용하면 더 빠르다.
3곳의 데이터 센터로 부하가 분산된다.
A가 장애가 발생해도 B,C가 살아 있어 지속적으로 동작할 수 있다 (가용성)
데이터 일관성을 맞추는 것이 힘들다.
이것을 해결하기 위해 단일 리더, 다중 리더, 리더 없는 복제 알고리즘을 설명한다.
카프카에서 배웠던 내용과 유사하다.
모든 팔로워가 데이터를 저장할 때 까지 기다린다.
장점: 높은 일관성
단점: 전체 성능에 영향
리더가 변경된 로그를 팔로워에게 전송하고 완료를 기다리지 않는다.
장점: 데이터 변경 성능이 높다.
단점: 낮은 일관성
n개의 팔로워가 데이터 변경을 성공할 때 까지 기다린다.
장점 : 동기식 복제 보다 빠르다.
단점 : 비동기식 보다는 느리고 일관성도 낮다.
팔로워 중에 하나를 리더로 승격한다.
리더가 장애인지 확인한다.
리더를 선택하고 팔로워를 리더로 사용하기 위해 시스템을 설정해준다.
2,3 번을 많이 사용한다.
쓰기 후 읽기 일관성
리더에 쓰기 후, 특정 시간 또는 타임스탬프를 활용하여 일정 시간 동안 리더에서 값을 읽는 방법
단조 읽기 : 동일한 팔로워에서 읽기가 동작되도록 한다.
복제를 할때 데이터 베이스의 상황에 따라 A-1분 B-10분으로 처리 시간이 달라질 수 있다.
이 경우 A와 B에서 읽기가 발생하면 데이터가 있다가 없어지는 문제가 발생하는데 이를 해결하는 방법이다.
일관된 순서로 읽기
샤딩된 데이터 구조에서 흔히 발생된다.
일련의 데이터가 순서대로 읽을 수 있도록 보장한다.
예시로 리뷰는 보이는데 게시글이 안보이는 문제가 없도록 하는 것.
데이터 센터를 예시로
데이터 센터 마다 리더가 있는 형식을 가정한다.
데이터 센터의 각 리더들은 서로의 변경 사항을 비동기식 변경 사항으로 복제한다.

각 데이터 센터에서 같은 데이터를 변경할 때, 정상적으로 수행이 된다.
하지만 이후 리더들은 복제할 때 어떤 데이터를 반영할지 충돌이 생긴다.
쓰기에만 리더간 동기식 복제를 한다.
멀티 리전을 사용의 주요한 장점을 잃는다. 독립적인 처리가 불가능
특정 데이터는 특정 데이터 센터로 라우팅한다.
데이터 센터 장애 발생시 다시 라우팅 해야 하고 복잡하다.
마지막 기록만을 저장한다. last write win 전략
데이터 유실의 가능성이 존재한다.
애플리케이션으로 사용자가 정의하는 전략 (모든 쓰기 충돌을 기록하거나 자동으로 충돌 해소)
코드에 따라서 예외가 발생할 수 있다.
- 정족수
w(쓰기 성공 수) + r(읽기 요청 수) > n(복제 DB 수) => 최신값 얻을 수 있다.네트워크 지연등으로 쓰기 이벤트는 서로 다른 순서로 도착할 수 있다.
마지막 기록만을 저장한다. last write win 전략
데이터 유실의 가능성이 존재한다.
애플리케이션으로 사용자가 정의하는 전략 (모든 쓰기 충돌을 기록하거나 자동으로 충돌 해소)
코드에 따라서 예외가 발생할 수 있다.