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