Dynamo: Amazon’s Highly Available Key-value Store — 요약

DeCandia et al. (Amazon, SOSP 2007) · DOI 10.1145/1294261.1294281
원본 레퍼런스: 02_Dynamo_원본 · 읽기리스트: 09_논문_읽기리스트 #2

1. 배경 — “장바구니는 절대 멈추면 안 된다”

  • 아마존 규모에서는 항상 어딘가 장애가 나 있다(디스크·노드·네트워크 분할). 장애를 예외가 아니라 상시 상태로 전제.
  • 핵심 요구: “Always writeable” — 쓰기(장바구니 담기)는 어떤 상황에서도 거부되면 안 됨. 가용성이 최우선.
  • 그래서 CAP 중 AP(가용성 + 분할내성) 를 선택하고 강한 일관성(C)을 포기 → 대신 최종 일관성(Eventual Consistency).
  • 대상 워크로드: 대부분 키 기반 단순 조회/저장(관계형 쿼리·조인 불필요). SLA를 평균이 아니라 99.9 백분위로 관리.

2. 설계 원칙

  • 점진적 확장성(Incremental scalability) — 노드 한 대씩 추가/제거
  • 대칭성·분산성(Symmetry, Decentralization) — 마스터 없음, 모든 노드 동등 → SPOF 제거
  • 이질성(Heterogeneity) — 성능 다른 노드가 능력만큼 부하 분담

3. 핵심 기법 (문제 → 해법)

문제해법
데이터 분산·확장Consistent Hashing(링) + 가상 노드(virtual node)로 부하 균등·이질성 대응
고가용성 쓰기복제(N개 노드) + 링에서 시계방향 N개에 저장
버전 충돌Vector Clock(벡터 시계)로 인과관계 추적. 자동 병합 불가 시 충돌을 읽기 시점에 애플리케이션이 해결(예: 장바구니 합집합)
일관성 vs 지연정족수 (N, R, W) — R+W>N이면 읽기가 최신 반영. 아마존은 흔히 N=3
일시 장애Sloppy Quorum + Hinted Handoff — 원 노드가 죽으면 대신 받아뒀다가 복귀 시 넘겨줌(쓰기 계속 성공)
영구 장애·복제본 동기화Merkle Tree로 anti-entropy(차이 나는 범위만 비교·동기화)
멤버십·장애 감지Gossip 프로토콜(분산 전파)

4. 왜 중요한가 (아키텍처적 가치)

  • NoSQL·분산 스토리지 설계 패턴의 원류. Cassandra, Riak, Voldemort 등이 직접 계승.
  • “일관성을 애플리케이션에 위임한다”, “가용성을 위해 최종 일관성을 받아들인다”는 설계 철학의 전환점.
  • Consistent Hashing·Vector Clock·Quorum·Hinted Handoff·Merkle Tree·Gossip — 분산 시스템의 표준 도구상자를 한 논문에 집약.

5. 한계·트레이드오프

  • 최종 일관성 → 읽기가 옛 값을 볼 수 있고, 충돌 해결 부담이 애플리케이션으로 넘어감.
  • 키-값 모델 → 복잡한 질의·트랜잭션엔 부적합.
  • 벡터 시계는 노드 수 많아지면 크기 관리(절삭) 필요.

연결

  • 대비: 01_Raft_논문_요약 — Raft는 강한 일관성(CP) 지향. Dynamo는 정반대 축(AP).
  • CAP·최종일관성·Quorum → 학습 로드맵 03_DB_데이터엔지니어링 §2(NoSQL·분산 DB).
  • Consistent Hashing·Gossip → 07_백엔드_실시간시스템 분산 패턴.