Chapter 6

리더 선출과 복제

  • 6.1 리더 선출이 필요한 이유
  • 6.2 Bully Algorithm
  • 6.3 Ring Algorithm
  • 6.4 초대 알고리즘
  • 6.5 합의 기반 리더 선출
  • 6.6 CAP 정리
  • 6.7 일관성 모델
  • 6.8 세션 모델
  • 6.9 튜너블 일관성
  • 6.10 CRDT

분산 시스템에서 리더를 뽑고 복제본 간 일관성을 유지하는 건 결국 하나의 문제야 — 여러 노드가 하나의 진실에 동의하는 것.

리더가 있으면 좋은 점은 명확해. 모든 쓰기를 리더가 처리하면 전역 순서를 쉽게 부여할 수 있고, 모든 노드가 합의할 필요 없이 리더 한 명이 결정하면 단순하지. 하지만 리더에 의존하면 단일 실패점(SPOF) 이 되니까, 리더가 죽었을 때 빠르게 새 리더를 뽑아야 해. 이때 보장해야 할 건 두 가지야 — 동시에 두 리더가 있으면 안 되는 안전성과, 리더 없는 상태가 영원히 지속되면 안 되는 활성.

초기 알고리즘들은 독립적으로 리더를 뽑으려 했어. Bully Algorithm은 "가장 높은 ID가 이긴다"는 단순한 규칙이고, Ring Algorithm은 메시지를 링으로 돌려 최대 ID를 찾지. 초대 알고리즘은 그룹 기반으로 네트워크 파티션 상황을 자연스럽게 처리하는 게 특징이고. 하지만 이런 독립적인 선출은 데이터 일관성과 분리돼 있다는 근본적 한계가 있어.

실제 분산 DB에서 쓰는 리더 선출은 대부분 합의 알고리즘에 내장돼 있어. ZAB는 가장 최신 로그를 가진 노드를 우선하고, Multi-Paxos는 안정적 리더가 제안을 독점해서 효율을 높이고, Raft임기(term) 개념으로 오래된 리더 메시지를 무시하지. 리더 선출과 데이터 합의가 하나의 프로토콜로 통합돼 있으니까, 리더가 바뀌어도 데이터 일관성이 자연스럽게 보장되는 거야.

리더를 통해 쓰기 순서를 정했다면, 그 다음 질문은 복제본 간의 일관성을 얼마나 강하게 유지할 것인가야. CAP 정리가 말하는 건 간단해 — 네트워크 파티션은 피할 수 없으니까 P는 포기할 수 없고, 결국 일관성(C)과 가용성(A) 중 선택해야 한다는 거야. 하지만 현실에서는 CP냐 AP냐의 이분법이 아니라 다양한 수준이 있어. 선형화 가능성은 모든 연산이 원자적이고 실시간 순서를 존중하는 가장 강력한 수준이고, 순차 일관성은 전역 순서만 보장하되 실시간과 일치할 필요는 없어. 인과 일관성은 인과 관계가 있는 연산만 순서를 보장하고, 최종 일관성은 "결국에는" 모든 복제본이 같아진다는 것만 보장하지.

최종 일관성은 너무 약해서 쓰기 어려운데, 세션 모델이 이걸 보완해. "내가 쓴 건 내가 볼 수 있다"(Read Your Own Writes), "한 번 새 값을 봤으면 옛날 값으로 안 돌아간다"(단조 읽기) 같은 보장을 세션 단위로 제공하는 거야. 전역 일관성보다 비용이 낮으면서 대부분의 앱에 충분하지. 튜너블 일관성은 더 유연해서, 복제본 수 N에 대해 쓰기 응답 수 W와 읽기 응답 수 R을 조절할 수 있어. W + R > N이면 쿼럼이 겹치니까 강한 일관성, 아니면 최종 일관성이야. 같은 시스템에서 계정 정보는 강하게, 좋아요 수는 약하게 설정할 수 있지.

CRDT는 아예 다른 접근이야. 자료구조 수준에서 동시 수정이 일어나도 충돌 없이 자동으로 수렴하게 만드는 거거든. G-Counter, PN-Counter, OR-Set 같은 타입들이 있고, 조정 없이 각 복제본이 독립적으로 수정하고 나중에 합치면 같은 상태에 도달해. 모든 데이터 타입을 표현할 수는 없지만, 가능한 경우에는 가장 우아한 해법이야.


정리

6장 읽고 기억할 거 세 가지:

  1. 리더 선출은 안전성활성을 보장해야 하며, 실제 분산 DB에서는 ZAB, Multi-Paxos, Raft 같은 합의 프로토콜에 리더 선출이 내장돼 데이터 일관성과 통합된다.
  2. CAP 정리 아래에서 일관성은 선형화 가능성부터 최종 일관성까지 스펙트럼이며, 튜너블 일관성은 W + R > N 조건으로 워크로드별로 다른 수준을 선택할 수 있다.
  3. CRDT는 자료구조 수준에서 충돌을 자동 해소해서, 조정 없이도 복제본들이 같은 상태로 수렴한다.