study/Database

DB 부하 대처 방법: Scaling, CQRS, Replication, Partitioning, Sharding

836586697769 2024. 2. 3. 21:20

@notion

 

 

수직적 확장(Scale Up)과 수평적 확장(Scale Out)

 

수직적 확장(Scale Up)과 수평적 확장(Scale Out)

@notion 수직적 확장(Scale Up) 단일 서버의 스펙(메모리, CPU 등)을 업그레이드하는 것 장점 확장 과정이 비교적 간단함 하나의 서버만을 관리하면 되므로 여러 서버를 관리하는 비용 발생X 단점 확장

lueahc.tistory.com

 

CQRS(Command Query Responsibility Segration) 패턴

  • 조회(Read)에서의 모델과 업데이트(Create, Update, Delete) 할 때의 모델을 분리하는 아키텍처 패턴
  • 장점
    • 명령(Command=시스템의 상태를 변경하는 작업)과 조회(Query=시스템의 상태를 조회하는 작업)를 분리하여 성능과 보안성을 높임
    • 각 DB에 대해 독립적인 스케일링 가능
    • 둘의 관심사 분리를 통해 시스템의 유지 보수와 보안 관리가 용이해짐
  • 단점
    • 업데이트 모델이 조회 모델에 반영되어야 하는 데에 딜레이가 생겨 데이터의 일관성이 깨질 수 있음
    • 시스템의 복잡성을 증가시킴

 

Replication(복제)

  • DB의 데이터를 다른 곳에 물리적으로 복사해두는 기술
  • 비동기적으로, 단방향으로만 이루어짐
  • Master & Slave DB
    • Master DB: 데이터 동시성이 높게 요구되는 트랜잭션을 담당하며 Create, Update, Delete 쿼리 요청 시 Bianary Log를 생성하여 Slave DB로 전달
    • Slave DB: Read(select) 쿼리 요청을 담당하며 N개의 Slave DB 구성 가능
  • 장점
    • 역할 분담을 통해 트래픽 집중 문제 해결
    • Master DB에 에러 발생 시 Slave DB를 통해 복구 가능
  • 단점
    • Slave DB에 반영될 때의 딜레이로 두 서버간의 데이터 불일치 문제가 발생할 수도 있음
    • Master DB에 문제가 발생할 경우 Slave DB로 Failover(서버에 이상이 생겼을 때 예비 시스템으로 자동전환되는 기능)해주는 기능 지원 X

 

파티셔닝(Partitioning)

  • DB를 여러 부분으로 분할하는 기법
  • 장점
    • 데이터 접근의 범위를 줄여 관리가 용이하며 성능 향상
    • 전체 데이터의 훼손 가능성이 줄어들어 데이터 가용성 향상
    • 훼손 시 partition 별로 복구 가능
  • 단점
    • 테이블 간 join 비용 증가
  • 종류
    • 수평 파티셔닝: 하나의 테이블의 각 행을 다른 테이블에 분산 → 데이터의 개수가 줄어 성능 향상
    • 수직 파티셔닝: 하나의 테이블의 일부 열을 빼내는 형태로 분할 → 자주 사용하는 칼럼을 분리하여 성능 향상

 

샤딩(Sharding)

  • DB를 다수의 데이터베이스에 분산하여 저장하는 기법
  • 장점
    • 쿼리 성능 향상
    • 서버 부하 분산
  • 단점
    • DB 서버 간의 연결 과정 때문에 비용이 증가할 수 있음
    • 하나의 서버가 고장나면 데이터의 무결성이 깨질 수 있음
  • 수평 파티셔닝 vs 샤딩
    • 수평 파티셔닝: 같은 데이터베이스 내에서 하나의 큰 테이블을 쪼개 분산 저장하는 기법
    • 샤딩: 하나의 큰 테이블을 쪼개 각각 다른 데이터베이스에 분산 저장하는 기법 (데이터베이스 상의 수평 확장)

 

 

reference