❐ Sharding
1. 샤딩이란?
샤딩은 동일한 스키마를 가지고 있는 여러대의 데이터베이스에 데이터를 작은 단위로 나누어 분산
저장하는 기법이다. 데이터 자체를 분산 저장해서 수평 분할(Horizontal Partitioning)이라고도 한다.
데이터를 분배할 때는 샤딩 키(Sharding Key)를 사용한다.
또한 샤딩은 수평 분할(Horizontal Partitioning)이라고 할 수 있다.
샤드(Shard)는 샤딩(Sharding)에서 사용되는 개념으로, 하나의 데이터베이스를 여러 개의 독립적인
단위로 나눈 데이터 조각을 의미한다. 각 샤드는 자체적으로 완전한 데이터베이스로 기능하며,
전체 데이터베이스 시스템의 일부 데이터를 저장합니다.
2. 샤딩의 목적
☑️ 확장성
- 데이터의 양이 많아지고 쓰기/읽기 요청이 증가할 때, 하나의 DB 서버만으로는 처리하기 어렵다.
- 샤딩을 통해 데이터를 여러 샤드로 분산하여 부하를 나누고, 더 많은 서버를 추가해 확장이 가능하다.
☑️ 성능 향상
- 각 샤드가 데이터의 일부만 저장하므로, 쿼리 범위가 줄어들어 성능이 향상된다.
- 병렬 처리가 가능하므로 요청 처리 속도가 빨라진다.
- 각 샤드가 병렬적으로 독립적인 작업을 수행할 수 있는 구조
3. 샤딩을 할 때 생각해야 할 부분
설계 및 구현의 복잡성 | 샤드 키 설계, 데이터 분배 로직 구현 등이 어려움. |
샤드 간 조인 불가능 | 샤드 간 조인을 애플리케이션 레벨에서 처리해야 함. |
관리의 어려움 | 샤드가 많아질수록 모니터링, 백업, 복구 등이 복잡해짐. |
샤드 추가/삭제 시 재분배 필요 | 샤드 수 변경 시 데이터를 재분배해야 하며 부하가 발생 |
데이터 일관성 문제 | 글로벌 트랜잭션을 보장하거나, 데이터 동기화를 유지하기 어려움. |
학습 곡선 | 샤딩 시스템 설계, 운영, 문제 해결에 대한 높은 기술적 이해 필요. |
4. 샤딩의 종류
☑️ 모듈러 샤딩(Modular Sharding)
데이터를 해시 값이나 특정 키 값을 기준으로 나누는 방식으로, 샤드 키 값을 모듈 연산을
통해 특정 샤드에 데이터를 분배한다.
- 장점
- 데이터 균등 분배 : 해시값과 모듈 연산을 사용하기 때문에 비교적 고르게 분배
- 간단한 구현 : 규칙이 명확하고 계산이 단순하여 구현이 쉽다.
- 단점
- 샤드 추가/삭제 시 데이터 재분배
- 조인 작업 복잡 : 샤드가 조인이 필요한 경우, 데이터를 애플리케이션 레벨에서 수집해야 함.
☑️ 레인지 샤딩 (Range Sharding)
데이터를 값의 범위를 기준으로 나누는 방식이다. 샤드 키 값이 특정 범위에 속하는 데이터를
해당 샤드에 저장한다.
Range | Target Shard |
1001 ~ 2000 | Shard2 |
2001 ~ 3000 | Shard1 |
3001 ~ 4000 | Shard0 |
- 장점
- 샤드 추가/삭제 용이 : 범위만 재조정 하면 되기 때문.
- 쿼리 최적화 : 특정 범위를 조회하는 쿼리를 효율적으로 처리할 수 있다.
- 단점
- 트래픽 불균형 가능성 : 특정 샤드에 트래픽이 집중된면 Hot Shard 문제 발생
- 범위 설계의 어려움 : 범위를 잘못 설계하면 샤드 간 데이터 불균형 야기
☑️ 디렉토리 샤딩 (Directory Sharding)
디렉토리 샤딩은 데이터를 특정 디렉토리(또는 매핑 테이블)에 저장된 정보에 따라 샤드(Shard)에
분배하는 방시이다. 이 방법에서는 데이터 분배를 위해 디렉토리(Directory)라는 별도의 매핑 구조를
유지하며, 각 데이터 항목이 어느 샤드에 저장되어 있는지를 디렉토리가 관리한다.
UserId | Region | Target Shard |
User:EU | 유럽 | Shard2 |
User:US | 미국 | Shard1 |
User:ASIA | 아시아 | Shard0 |
- 장점
- 유연한 데이터 분배
- 확장성 용이
- 데이터 분포 제어 : 핫 샤드 문제를 완화할 수 있다.
- 단점
- 디렉토리 관리 오버헤드
- 단일 장애점 : 디렉토리 시스템에 장애가 발생하면 데이터 접근 자체가 불가능하다.
- 추가적인 조회 비용 : 무조건 디렉토리를 먼저 조회해야 다음 작업을 할 수 있다.
5. Hot Shard
핫 샤드(Hot Shard)는 샤딩된 데이터베이스 시스템에서 특정 샤드에 요청(트래픽) 또는 데이터가
집중되어 해당 샤드만 과부하 상태가 되는 문제를 의미한다. 핫 샤드는 시스템 전체의 성능 저하를
초래할 수 있으며, 샤딩 설계 시 피해야 할 주요 문제 중 하나이다.
그럼 Hot Shard는 언제 발생할 수 있을까?
☑️ 시간 기반 데이터
로그 데이터를 저장하는 시스템에서 타임스탬프를 샤드 키로 사용하게 되면 최신 로그에 대한 요청이
증가하면서 해당 샤드에 트래픽이 몰리고 핫 샤드가 발생할 수 있다.
☑️ 인기 상품
전자상거래 시스템에서 상품 ID를 샤드 키로 사용하게 되면, 특정 인기 상품의 조회 및 구매 요청이 몰릴
수 있다. 이렇게 되면 해당 상품이 저장된 샤드에 과도한 트래픽이 발생하여 핫 샤드가 발생할 수 있다.
'CS > Database' 카테고리의 다른 글
Partitioning (0) | 2024.11.22 |
---|---|
SQL과 NoSQL (0) | 2024.11.20 |
MVCC (Multi Version Concurrency Control) (0) | 2024.10.02 |
Lock을 활용한 concurrency control (0) | 2024.10.02 |
Isolation 레벨과 이상 현상들 (0) | 2024.09.26 |