기술스택을 쌓아보자/데이터 엔지니어링
데이터 중심 애플리케이션 설계 - 복제 - 다중 리더 복제
소리331
2023. 4. 21. 08:30
반응형
다중 리더 복제
- 리더에 대한 의존성이 높다.
- 리더가 여러개: 다중리더설정, 마스터미스터 액티브/액티브 복제
다중 리더 복제의 사용사례
다중 데이터센터 운영
- 데이터 센터마다 리더를 두고 복제를 진행
오프라인 작업을 하는 클라이언트
- 인터넷이 끊어진 동안 앱이 계속 동작해야하는 경우
- 이 경우 로컬 데이터베이스가 있다. 아키텍처 관점에서 보면 근본적으로 다중 리더복제와 동일하다.(구글 캘린더?)
협업 편집
- 실시간 협업 편집 애플리케이션: ex 구글독스
- 오프라인 사용 사례와 공통점이 많다. 로컬에 적용하고 이후 비동기방식으로 타 사용자의 db와 연동한다.
- 충돌이 없으려면 편집전 문서의 lock을 얻어야한다.
쓰기 충돌 다루기
동기 대 비동기 충돌감지
- 단일 리더: 들어온 순서대로 차근차근 처리함
- 다중 리더: 리더들의 쓰기는 모두 성공하며 충돌은 이후 특정시점에서 비동기로 감지
- 동기도 가능하지만 그러면 속도 향상인 장점을 잃어버리게 됨.
충돌 회피
- 하나의 레코드 내에서 일어나는 모든 쓰기 액션을 같은 리더 안에서 진행하도록 하는 것
일관된 상태 수렴
- 단일에서는 마지막에 작성된 값을 최종값으로 정하기 쉬운데, 다중리더설정에서는 그렇제 않다. ⇒ db가 일관성을 잃어버릴 수 있음
- 이를 해소하기 위해 convergent 방식으로 충돌을 해소한다 ⇒ 모든 db는 동일한 최종값을 가진다.
- 쓰기별로 id를 부여한다.(unix timestamp 등.) ⇒ 최종 쓰기 승리
- 복제서버에 id를 저장하고 가장 높은 id를 마지막 값으로 따라가도록 한다.
- 어떻게든 값을 병합한다 b+c
- 명시적으로으로 충돌 관리 코드를 작성
사용자 정의 충돌 해소 로직
- 충돌은 일반적으로 로우나 문서 수준에서 적용된다.
- 자동 충돌 해소: conflict-free replicated datatype, mergeable persistent data structure, operational transformation
충돌은 무엇인가?
- 명백: 동일한 레코드의 동일한 필드를 동시에 다른 값으로 수정
- 잡기 어려운 충돌도 있음
다중 리더 복제 토폴로지
- 복제 토폴로지: 한 노드에서 다른 노드로 쓰기를 전달하는 통신 경로
- circular topology (원형, mysql 의 진행방식), 별모양 토폴로지
- 모든 노드를 순차적으로 거치기 때문에 무한루프 방지용 로그 트래킹이 필요하다.
- 하나의 노드에 장애가 발생하면 다른 노드 간 복제 메시지 흐름에 방해를 준다.
- 내결함성이 훨씬 좋다( 경로를 따라 이동하여 단일 장애점을 피할 수 있음)
- all-to-all 전체연결, (그물망 토폴로지)
- 네트워크 연결 속도에 따라 일부 복제 메시지가 다른 메시지를 추월할 수 있다.
- 일관된 순서로 읽기: 인과성
- 이런 이벤트를 해결하기 위해 version vector 라고 하는 기법을 사용한다.
- 네트워크 연결 속도에 따라 일부 복제 메시지가 다른 메시지를 추월할 수 있다.
리더 없는 복제
- 리더의 개념을 버리고 복제가 직접 클라이언트로부터 쓰기를 직접 받을 수 있게 허용
- Dynamo style
노드가 다운됐을 때 데이터베이스에 쓰기
- 리더가 있는 경우 리더노드가 다운되면 장애 복구가 필요하지만, 리더없는 설정에서는 장애복구가 필요하지 않다.
- 노드가 다시 온라인 상태가 되었을 때는 읽기 요청을 병렬로 여러노드에 전송한다. ⇒ OUTDATED DATA의 최신화
읽기 복구와 안티 엔트로피
- 복제 계획은 모든 데이터가 모든 복제서버에 복사된 것을 보장해야한다.
- 누락된 쓰기를 따라잡는 방법
- 읽기 복구
- 안티 엔트로피 처리: 백그라운드 프로세스를 띄워 서버간 데이터 차이를 지속적으로 감지 및 복사(시간 오래 걸릴 수 있음)
읽기와 쓰기를 위한 정족수
- 하는 이유: 사용 불가능한 노드의 수를 용인하기 위해(일종의… 일종의 버퍼?)
- 이정도 하면 최신값 반환할거야~
- Writing server + Read(검수용) > Total db count
- W개의 쓰기를 보장하려면 w+r>T 가 되는 수만큼의 r을 진행하여야 한다.
- 이걸 정족수 읽기와 쓰기라고 한다.
- 상황에 따라 숫자를 변경할 수 있다.
정족수 일관성의 한계
- 보통 과반수를 선택한다.
- 정족수읽기는 적절한 복제와 쓰기 수를 할당하는 만큼 최근에 쓴 값을 반환하는 것을 보장하지만, 실제로는 그렇지 않다.
최신성 모니터링
- 운영 관점에서 최신결과를 반환하는지 여부를 모니터링하는 것은 중요하다.
- 복제 상태에 대해 알아야 한다.
- 리더기반 복제에서는 일반적으로 복제 지연에 대한 지표를 노출하고 ,이것은 모니터링 시스템에 표현된다.
- 리더없는 복제 시스템에서는 쓰기 순서를 고정할 수 없어 모니터링이 어렵다.
느슨한 정족수와 암시된 핸드오프
- W나 r 노드 정족수를 만족하지 않는 모든 요청에 오류를 반환
- 쓰기를 받아들이고 값이 보통 저장되는 n개 노드에 속하지는 않지만 연결할 수 있는 노드에 기록 ⇒ 느슨한 정족수
- 암시된 핸드오프: 느슨한 정족수 상황에서 네트워크 장애 상황이 해제되면 한 노드가 다른노드를 위해 일시적으로 수용한 모든 쓰기를 해당 홈 노드에 전송한다.
- ⇒ 여기서 홈 노드가 뭔지 잘 감이 안옴
- 느슨한 정족수는 쓰기 가용성을 높이는데 유용하다.
다중 데이터센터 운영
- 카산드라, 볼드모트: 일반적인 리더없는 모델에 다중 데이터센터를 구현함.
반응형