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가 맞음!

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기