저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가합니다.
데이터베이스의 규모를 확장하는 데는 두 가지 접근법이 있습니다. 하나는 수직적 규모 확장법이고 다른 하나는 수평적 규모 확장법입니다.
수직적 확장
스케일 업이라고 부르는 수직적 규모 확장법은 기존 서버에 더 많은, 또는 고성능의 자원(CPU, RAM,디스크 등)을 증설하는 방법입니다.
약점
- 데이터베이스 서버 하드웨어에는 한계가 있으므로 CPU, RAM 등을 무한 증설할 수는 없습니다. 사용자가 계속 늘어나면 한 대 서버로는 결국 감당하기 어렵게 될 것입니다.
- SPOF(Single Point of Failure)로 인한 위험성이 큽니다.
- 비용이 많이 듭니다. 고성능 서버로 갈수록 가격이 올라가게 마련입니다.
수평적 확장
샤딩(sharding)이라고도 부르는데, 더 많은 서버를 추가함으로써 성능을 향상시킬 수 있도록 합니다.
- 수직정 확장법과 수평적 확장법의 차이점
샤딩
샤딩은 대규모 데이터베이스를 샤드(shard)라고 부르는 작은 단위로 분할하는 기술을 말합니다. 모든 샤드는 같은 스키마를 쓰지만 샤드에 보관되는 데이터 사이에는 중복이 없습니다.
샤드로 분할된 데이터베이스 예
- 사용자 데이터를 어느 샤드에 넣을지는 사용자 ID에 따라 정합니다.
- 이 사례에서는 user_id % 4를 해시 함수로 사용하여 데이터가 보관되는 샤드를 정합니다.
- 각 샤드 노드에 사용자 데이터가 어떻게 보관되는지를 보여주는 그림입니다.
샤딩 전략을 구현할 때 고려해야 할 것
가장 중요한 것은 샤딩 키(sharding key)를 어떻게 정하느냐 하는 것입니다. 샤딩 키는 파티션 키(partition key)라고도 부르는데, 데이터가 어떻게 분산될지 정하는 하나 이상의 컬럼으로 구성됩니다.
위 그림의 경우, 샤딩 키는 user_id입니다.
샤딩 도입 시 발생하는 문제
- 데이터의 재 샤딩(resharding): 재 샤딩은 다음과 같은 경우에 필요합니다. (1) 데이터가 너무 많아져서 하나의 샤드로는 더 이상 감당하기 어려울 때, (2) 샤드 간 데이터 분포가 균등하지 못하여 어떤 샤드에 할당된 공간 소모가 다른 샤드에 비해 빨리 진행될 때. 샤드 소진(shard exhaustion)이라고도 부르는 이런 현상이 발생하면 샤드 키를 계산하는 함수를 변경하고 데이터를 재배치하여야 합니다. 안정 해시(consistent hashing) 기법을 활용하면 이 문제를 해결할 수 있습니다.
- 유명인사(celebrity) 문제: 핫스팟 키(hotspot key) 문제라고도 부르는데, 특정 샤드에 질의가 집중되어 서버에 과부하가 걸리는 문제입니다. 가령 케이티 페리(Katy Perry), 저스틴 비버(Justin Bieber), 레이디 가가(Lady Gaga) 같은 유명인사가 전부 같은 샤드에 저장되는 데이터베이스가 있다고 해 봅시다. 이 데이터로 사회 관계망 애플리케이션(social application)을 구축하게 되면 결국 해당 샤드에는 read 연산 때문에 과부하가 걸리게 될 것입니다. 이 문제를 풀려면 위에 나열한 유명인사 각각에 샤드 하나씩을 할당해야 할 수도 있고, 심지어는 더 잘게 쪼개야 할 수도 있습니다.
- 조인과 비정규화(join and de-normalization): 일단 하나의 데이터베이스를 여러 샤드 서버로 쪼개고 나면, 여러 샤드에 걸친 데이터를 조인하기가 힘들어집니다. 이를 해결하는 한 가지 방법은 데이터베이스를 비정규화하여 하나의 테이블에서 질의가 수행될 수 있도록 하는 것입니다.
데이터베이스 샤딩을 적용한 아키텍처
- 데이터베이스에 대한 부하를 줄이기 위해 굳이 관계형 데이터베이스가 요구되지 않는 기능들은 NoSQL로 이전하였습니다.
참조
'System Design' 카테고리의 다른 글
[개략적인 규모 측정] 2의 제곱수 (0) | 2021.09.16 |
---|---|
[사용자 수에 따른 규모 확장성] 백만 사용자, 그리고 그 이상 (0) | 2021.09.13 |
[사용자 수에 따른 규모 확장성] 로그, 메트릭 그리고 자동화 (0) | 2021.09.09 |
[사용자 수에 따른 규모 확장성] 메시지 큐 (0) | 2021.09.08 |
[사용자 수에 따른 규모 확장성] 데이터 센터 (0) | 2021.09.07 |
댓글