책 읽어보고 재잘재잘/대규모 시스템 설계 기초1

데이터베이스의 규모 확장 (샤딩)

띠리링구 2024. 1. 8. 23:17

1. 수직적 확장 (scale up)

서버에 더 많은 고성능의 자원을 증설하는 방법 (CPU, RAM 등)

스택오버프로는 2013년 한 해 동안 방문한 천만 명의 사용자 전부를 단 한 대의 마스터 데이터베이스로 처리했다고 한다 ㅎㄷㄷ

한계점

(1) 하드웨어에는 한계가 있으므로 무한 증설할 수 없다. 사용자가 계속 늘어나면 결국 감당하기 어려운 시점이 온다.

(2) SPOF로 인한 위험성이 크다.

(3) 비용이 많이 든다.

 

2. 수평적 확장 (sharding)

샤딩 : 대규모 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술

고려해야될 점 중 가장 중요한 것 : 샤딩 키를 어떻게 생성할 것인가

(1) 데이터의 재 샤딩

데이터가 너무 많아져서 하나의 샤드로 감당하기 어려울 때,

샤드 간 데이터 분포가 균등하지 못하여 어떤 샤드에 할당된 공간 소모가 다른 샤드에 비해 빨리 진행될 때

샤드 키를 계산하는 함수를 변경하고 데이터를 재배치해야됨 -> consistent hashing 기법을 활용하면 이 문제 해결 가능

(2) 유명인사(celebrity) 문제 (=핫스팟 키 문제)

특정 샤드에 질의가 집중되어 서버에 과부하가 걸리는것.

만약 소셜미디어 서비스에서 저스틴비버, 레이디가가 같은 유명 인사들이 전부 같은 샤드에 저장되어 있으면

해당 샤드에는 read 연산으로 과부하가 걸릴것이다.

(3) 조인과 비정규화

데이터베이스를 여러 샤드로 쪼개면, 여러 샤드에 걸친 데이터를 조인하기가 힘들다.

데이터베이스를 비정규화하여 하나의 테이블에서 질의가 수행될 수 있도록 하는 방법이 있다.