Phase 7레슨 34

Dynamo

Consistent Hashing, Vector Clock, Quorum, Hinted Handoff — 가용성 극대화

💡ELI5·

쇼핑 카트와 Dynamo

쇼핑 카트 문제:
  고객이 카트에 물건을 담는데 서버가 장애 나면?
  → 매출 손실!

Dynamo 해결:
  → 장애 나도 쓰기 허용 (가용성 우선)
  → 복구 후 충돌 해결 (최종 일관성)
  → "담기는 항상 된다, 중복은 나중에 정리"
💡 비유쇼핑 카트 = 장바구니. 고객이 물건을 담을 때 '서버 장애'로 담기가 안 되면 고객이 떠난다. Dynamo는 '일단 담아둔다, 나중에 정리한다' 전략. 가용성 > 일관성.
🔬Deep Dive·

Consistent Hashing

해시 링 (0 ~ 2^32-1):
       Node A (0°)
      /           Node D        Node B
               /
       Node C

  key "user:123" → hash → 링 위 위치
  → 시계 방향으로 다음 노드가 담당 (Node B)

  Node E 추가:
  → Node B와 D 사이에 배치
  → D가 담당하던 일부만 E로 이동 (다른 노드 영향 X)
🔬Deep Dive·

Quorum (N, R, W)

설정일관성성능적합
R=1, W=1 (N=3)약함 (최종)매우 빠름캐시, 세션
R=2, W=2 (N=3)강함 (R+W>N)중간일반 웹 (균형)
R=3, W=3 (N=3)매우 강함느림금융, 설정
R=1, W=3 (N=3)쓰기 강함, 읽기 빠름쓰기 느림쓰기 일관성 중요
🔬Deep Dive·

Vector Clock — 충돌 감지

초기: 카트 = {items: [A]}, clock = [N1:1]

파티션 발생:
  N1에 쓰기: {items: [A,B]}, clock = [N1:2]
  N2에 쓰기: {items: [A,C]}, clock = [N1:1, N2:1]

복구 후:
  [N1:2] vs [N1:1, N2:1] → 동시 수정 (충돌!)
  → 클라이언트에게 두 버전 모두 반환
  → 클라이언트가 merge: {items: [A,B,C]} → clock = [N1:3, N2:2]
⚖️Trade-off·

Dynamo 모델의 Trade-off

이점대가
항상 읽기/쓰기 가능 (고가용성)최종 일관성 (일시적 불일치)
노드 추가/제거 부하 최소충돌 해결을 클라이언트가 담당
Quorum으로 일관성 튜닝Vector Clock 이해 필요
장애 중에도 쓰기 (Hinted Handoff)복구 시 충돌 정리 비용

❓ 체크포인트 질문

  1. 1.Dynamo가 가용성을 최우선으로 설계된 이유는?
  2. 2.Consistent Hashing이 노드 추가/제거 시 이점은?
  3. 3.Vector Clock이 충돌을 어떻게 감지하는가?
  4. 4.Quorum에서 N, R, W의 관계와 트레이드오프는?
  5. 5.Hinted Handoff가 무엇인가?