CouchDB는 Standalone 모드를 써야할까? Clustered 모드를 써야할까?
CouchDB 클러스터에서 부하 분산이 작동하는 방식을 설명드릴게요:
읽기(Read) 요청의 분산
클라이언트 요청 → [로드밸런서]
├─ 노드1에서 읽기 ✅
├─ 노드2에서 읽기 ✅
└─ 노드3에서 읽기 ✅
- 모든 노드가 동일한 데이터를 가짐
- 아무 노드나 읽기 가능
- 읽기 부하가 자동 분산됨
쓰기(Write) 요청의 처리
클라이언트 쓰기 요청 → [임의의 노드]
└─ 다른 노드들과 동기화
(쿼럼 기반 합의)
- 쓰기는 모든 노드가 합의해야 함
- 쓰기 부하는 크게 분산되지 않음
단일 노드:
- 100개 읽기 요청 → 1개 노드가 100개 처리
클러스터(3노드):
- 100개 읽기 요청 → 각 노드가 약 33개씩 처리
따라서:
읽기 작업이 많은 경우 → 큰 성능 향상
쓰기 작업이 많은 경우 → 제한적 성능 향상
대부분의 애플리케이션은 읽기가 쓰기보다 훨씬 많기 때문에, 클러스터가 효과적입니다!
분산 시스템에서, Node 3개가 최소 권장 구성인 이유는?
아, 이건 분산 시스템의 "쿼럼(Quorum)" 개념 때문입니다:
n=2일 때의 문제
[노드1] ←→ [노드2]
네트워크 단절 시:
[노드1] ✕ [노드2]
문제:
- 어느 노드가 맞는 데이터인지 판단 불가
- 두 노드 모두 자신이 맞다고 주장 가능
- Split-brain 현상 발생
n=3일 때의 안정성
[노드1] ←→ [노드2]
↕ ↕
└──→ [노드3]
네트워크 문제 시에도:
- 과반수(2개) 노드가 합의 가능
- 어떤 데이터가 최신인지 판단 가능
n=2 일 때:
노드1: "데이터=A" (50%)
노드2: "데이터=B" (50%)
→ 어느 것이 맞는지 모름!
n=3 일 때:
노드1: "데이터=A" (33%)
노드2: "데이터=A" (33%)
노드3: "데이터=B" (33%)
→ 과반수가 A라고 하므로 A가 맞음!
최근댓글