분산 시스템(distributed systems)(네트워크를 통해 함께 동작하는 여러 컴퓨터)은 단일 머신 시스템에는 없는 상당한 과제를 가져옵니다 — 네트워크 불안정성, 부분 장애, 일관성, 조정 등. 이를 이해하는 것은 대규모 시스템 설계에 필수적입니다.
분산 시스템이 어려운 이유
네트워크를 통해 통신하는 여러 머신은 근본적 과제를 도입함:
→ 네트워크는 불안정 (latency, 패킷 손실, 분할)하고 즉각적이지 않음
→ 부분 장애 → 일부가 실패하고 다른 부분은 동작 (단일 머신의 all-or-nothing과 대비)
→ 공유 메모리/시계 없음 → 조정이 어려움
→ "네트워크는 신뢰할 수 있다" 등은 FALLACY — 분산 시스템은 이 가정을 깸.
핵심 과제
네트워크 → 불안정, 가변 latency, 분할 (메시지 도착/속도를 가정할 수 없음)
부분 장애 → 일부 구성 요소 실패 처리 (감지, 재시도, 복구); 다운인가 느린가?
일관성 → 노드 간 데이터 일관성 유지 (CAP 트레이드오프; eventual consistency)
조정 → 합의, 분산 동의, 리더 선출 (어려움; 예: Raft/Paxos)
순서/시간 → 전역 시계 없음; 노드 간 이벤트 순서가 어려움
동시성 → 많은 일이 동시에; 노드 간 경쟁 조건
멱등성 → 중복 메시지/재시도를 안전하게 처리
