DBAtlas · 데이터베이스 운영 아틀라스

결정: 샤딩인가 복제인가(확장)?

데이터베이스 확장 결정은 병목이 읽기인지 쓰기인지, 데이터가 단일 노드에 담기는지에 따라 달라진다. 잘못된 전략은 불필요한 복잡성이나 해결되지 않은 병목을 낳는다. 이 트리는 먼저 가장 저렴하고 단순한 옵션(수직 확장, 캐싱)을 상기시킨 뒤 읽기 복제본과 샤딩 중 올바른 선택을 돕는다.

가장 단순한 방법인 수직 확장과 쿼리 튜닝을 먼저 시도했는가?

분산 아키텍처로 넘어가기 전에 가장 저렴한 개선부터 취한다: 하드웨어(CPU/RAM/IOPS) 증설, 누락된 인덱스 추가, 비용이 큰 쿼리 수정으로 대부분의 병목이 해결된다. 이것들이 소진되었을 때만 복잡성을 더한다.

  • 아니요 / 아직 한계에 도달하지 않음
  • 예, 수직 확장과 튜닝으로는 부족함

병목은 읽기인가, 아니면 쓰기/데이터 양인가?

확장 문제의 원인을 분리한다: 많은 읽기 쿼리가 단일 노드를 압박하는가(읽기 중심), 아니면 쓰기 속도나 전체 데이터 크기가 단일 노드의 용량을 넘는가(쓰기/용량 중심)? 이 구분이 복제본과 샤딩의 근본적인 차이다.

  • 읽기 트래픽이 지배적, 쓰기는 단일 노드로 충분
  • 쓰기 속도 또는 데이터 양이 단일 노드를 초과

읽기가 반복적/캐시 가능한가, 아니면 최신이고 다양한가?

읽기 병목을 한 단계 더 나눈다: 같은 결과를 반복해서 읽는가(캐시가 매우 효과적), 아니면 다양하고 광범위한 최신 데이터를 요청하는가(추가 읽기 용량 필요)? 이에 따라 캐시 계층과 읽기 복제본 중 선택이 결정된다.

  • 같은 데이터를 반복해서 읽음, 약간의 지연된 데이터는 허용
  • 다양한/최신 읽기, 순수 읽기 용량이 필요

권장: 수직 확장 + 쿼리 튜닝 우선

분산 아키텍처로 넘어가기 전 첫 번째이자 가장 저렴한 방법이다. 하드웨어 증설과 쿼리/인덱스 수정으로 운영 복잡성을 더하지 않고 대부분의 확장 문제를 해결한다.

권장: 읽기 복제본(읽기 확장)

쓰기는 단일 노드(primary)에 유지하고 읽기 트래픽은 하나 이상의 복제본으로 분산한다. 읽기 중심 워크로드에서 순수 읽기 용량과 복원력을 높이는 표준 방법이다.

권장: 캐시 계층

자주 반복해서 읽는 결과를 빠른 인메모리 계층에 유지하면 데이터베이스 부하가 크게 줄어든다. 적절한 패턴을 사용하면 데이터베이스에 가지 않고 응답해 지연과 부하를 모두 낮춘다.

권장: 샤딩(쓰기/데이터 확장)

데이터를 샤드 키로 분할해 여러 독립 노드에 분산한다. 각 노드는 데이터 일부와 그에 대한 쓰기를 담당한다. 쓰기 속도와 전체 데이터 양을 확장하는 방법이지만 상당한 복잡성이 추가된다.

DBAtlas에서 열기 →