- 동기식과 비동기식
- 동기식: 안정성이 높으니 느림
- 비동기식: 내구성이 약하기 때문에 나빠보이지만 분산을 위해선 어쩔 수 없는 선택
- 장애 복구
- 리더가 장애인 지 판단 → 새로운 리더 선출 → 새로운 리더 사용
- 리더가 변경되면서 그 동안의 쓰기를 수신 하지 못 하는 문제 발생
- 스플릿 브레인: 리더가 서로 자신이 리더인 줄 아는 상황
- 복제 로그
- 구문 기반 복제: 실제 사용된 insert, update, delete 등 그대로 사용
- 간편하지만 비결정적인 함수 문제나 성능 등에 영향이 있음
- 쓰기 전 로그(WAL)
- 저수준의 데이터를 기술함으로 엔진이 밀접하게 엮여 버전 등에 의존성이 높음
- 논리적 (로우 기반) 로그
- 엔진과의 분리를 위해 다른 로그 형식 사용
- (RDB) 삽입된 로우는 전체, 삭제된 로우는 식별값, 갱신된 로우는 식별값과 업데이트될 로우
- 트리거 기반
- 데이터 베이스 변경 시 애플리케이션 코드를 실행하여 외부 프로세스가 처리할 수 있게 한다. 오버헤드, 버그 등이 발생하고 제약사항도 많지만 유연성이 높다.
- 구문 기반 복제: 실제 사용된 insert, update, delete 등 그대로 사용
- 복제 지연
- 자신이 쓴 내용이 다른 팔로워에는 아직 반영 전일 수도 있어서 쓴 팔로워만 읽을 수 있게 한다.
- 팔로워마다 쓰기 시간이 달라 과거로 돌아가는 듯한 현상이 발생할 수 있으므로 한 팔로워에서만 읽게 한다.
- 순서가 바뀌는 현상은 인과성이 있는 쓰기는 동일한 파티션에 저장하도록 할 수 있으나 효율적이지 못 하다
- 다중 리더
- 단일 리더에 비해 장점
- 단일 리더보다 쓰기가 빠르다
- 데이터센터 중단에 내성이 생긴다
- 네트워크 문제에 내성이 생긴다
- 오프라인 작업 가능
- 클라이언트를 하나의 리더처럼 사용
- 쓰기 충돌
- 마지막 쓰기를 유지 → 마지막이란 개념이 모호하다.
- 사용자에게 선택하게 한다.
- 단일 리더에 비해 장점
- 리더 없는 복제
- 모든 서버에 쓰기가 가능하므로 노드 다운에 강하나 오래된 데이터를 읽을 위험 증가
- 여러 노드에 읽기를 수행하여 오래된 응답 감지
- n개의 서버가 있을 때, w개의 노드에서 성공해야 쓰기가 확정되고, 최소 r개의 노드에 읽기를 한다면 w + r > n 이어야 최신 값을 읽을 수 있다.
- 백그라운드에서 지속적으로 누락된 데이터 찾기
- 여러 노드에 읽기를 수행하여 오래된 응답 감지
- 모든 서버에 쓰기가 가능하므로 노드 다운에 강하나 오래된 데이터를 읽을 위험 증가
- 동시성
- 여러 클라이언트에 동시에 같은 쓰기 가능
- 예전 값을 버리고 최신 값으로 덮어씀 → 최신 값이 명확하지 않음
- 두 작업의 순서를 정확히 알기 힘들기 때문에 두 작업이 서로 알지 못 하면 동시에 수행됐다고 한다.
- 동시에 발생한 값을 모두 저장하는 방식 → 버전 벡터
- 여러 클라이언트에 동시에 같은 쓰기 가능
'Studying > Data System Design' 카테고리의 다른 글
트랜잭션 [데이터 중심 애플리케이션 설계 7장] (0) | 2023.07.21 |
---|---|
파티셔닝 [데이터 중심 애플리케이션 설계 6장] (0) | 2023.07.13 |
부호화와 발전 [데이터 중심 애플리케이션 설계 4장] (0) | 2023.07.08 |
저장소와 검색 [데이터 중심 애플리케이션 설계 3장] (0) | 2023.07.07 |
데이터 모델 및 질의 언어 [데이터 중심 애플리케이션 설계 2장] (0) | 2023.06.14 |