-
Notifications
You must be signed in to change notification settings - Fork 0
DB 확장 방법
분야: BE, INFRA 사람: 승훈 장 주차: 2주차
DB 의 하드웨어 성능을 업그레이드 하여 확장하는 방식.
- CPU 연산장치를 더 빠른 하드웨어로 업그레이드.
- 저장장치를 SSD 등의 더 빠른 장치로 교체하여 읽기/쓰기 속도를 높임.
- RAM 을 증설하여 캐싱 성능 증가, 메모리 기반 연산 강화.
- 아키텍처를 고려하지 않고 확장 가능
- 기존 어플리케이션 코드 변경 최소화
- 하드웨어 한계 존재
- 급격한 비용 증가
DB 의 개수를 늘려 수평적으로 확장하여 성능을 늘리는 방식.
여러 데이터 베이스 인스턴스를 두고 데이터를 복제하여 인스턴스 간 동기화 하는 기술. 데이터베이스는 주로 읽기 작업에 대한 요청과 부하가 크기 때문에 읽기 성능을 향상시키는데 목적을 둔다.
마스터-슬레이브 구조
-
마스터
데이터가 쓰이는 메인 DB 인스턴스. 데이터의 변경사항을 다른 슬레이브에게 전파.
-
슬레이브
마스터의 데이터를 복제하여 Read-Only 로 적용. 읽기 작업을 주로 처리하여 데이터 베이스의 부하를 분산.
바이너리 로그 기반 복제
DB 에 변경사항이 일어나면 마스터에서 변경내용을 바이너리 로그로 기록. 변경 로그를 슬레이브로 전달하면 슬레이브에서 이를 릴레이 로그로 기록하였다가 DB 에 반영.
동기화 방식
-
동기화 복제 (Synchronous Replication) 마스터에서 변경사항이 슬레이브로 전파되고, 슬레이브에 적용된 뒤 응답을 반환하는 방식. 항상 일관된 데이터를 받아볼 수 있으나 쓰기 속도가 느려진다는 단점이 존재.
-
비동기 복제 (Asynchronous Replication)
마스터에서 변경사항을 적용한 후 바로 응답을 반환하는 방식. 슬레이브로의 전파는 이후에 수행. 속도는 빠르지만, 레플리카에서 데이터를 읽을 때 업데이트 전 데이터를 받을 가능성이 있음.
데이터를 여러개의 독립된 DB 서버에 분산저장하여 성능을 높이는 방식. 샤드는 각각 데이터의 일부분을 저장하며, 대용량 트래픽을 처리하기 위한 시스템에서 사용.
주요 개념
-
샤드
데이터의 서브셋(subset) 을 저장하는 독립적인 DB 서버. 각 샤드는 동일한 스키마를 가지지만 데이터는 서로 다름.
-
샤드 키
데이터를 샤드 간에 나누는 기준이 되는 속성. ID, 시간 등으로 나눌 수 있으며 각 샤드 간 데이터를 균등하게 분산시키는 게 목표.
샤딩 유형
-
수평 샤딩
- 테이블의 행을 기준으로 나누는 방식.
- 각 샤드는 동일한 스키마를 공유.
-
수직 샤딩
-
테이블의 열을 기준으로 나누는 방식.
-
DB를 기능별로 분리한다.
-
샤드간 의존성이 낮은 장점이 있지만, 테이블 간 조인 시 복잡성 증가.
-
샤딩 분산 방식
-
해시 기반
샤드 키를 해싱한 후, 샤드 개수 만큼 균등하게 분배.
Shard = Hash(user_id) % NumberOfShards
데이터가 균등하게 분배된다는 장점이 있지만, 샤드 수를 변경하는게 어렵다.
-
범위 기반
샤드 키 값 범위에 따라 데이터를 분배.
예: 사용자 ID가 1-1000은 샤드 1, 1001-2000은 샤드 2.
조회 시 특정 범위로 조회가능하고, 분배가 간단하다.
-
지리 기반
지역이나 국가에 따라 데이터를 분배.
예: 한국 사용자는 샤드 1, 미국 사용자는 샤드 2.
네트워크 레이턴시를 최소화 할 수 있고, 각 샤드를 독립적으로 관리 가능 하다.
사용자가 지역을 이동하면 데이터 이동이 필요하고 샤드 간 데이터 중복 발생할 수 있다.