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