BackEnd/네트워크와 인프라

[대규모 시스템 설계] 데이터베이스 규모 확장과 백만 사용자 이상의 시스템

짱호 2022. 3. 11. 20:11
반응형

가상 면접 사례로 배우는 대규모 시스템 설계 기초 요약정리 글입니다.

서비스 규모가 커지고 저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가한다.
이때 우리는 데이터베이스를 증설할 방법을 찾아야 한다.

데이터베이스의 규모 확장 방법은 앞서 살펴본 방법과 동일하게 scale up, scale out이 있다.

 

수직적 확장(Scale Up)

데이터베이스를 고성능의 자원으로 증설하는 방법이다.
AWS RDS는 24TB의 RAM을 제공하는 상품도 있을 만큼 고성능 데이터베이스 서버는 많은 양의 데이터를 보관하고 처리할 수 있다.
하지만 데이터베이스 수직적 확장은 몇 가지 심각한 단점이 있다.

  • 고성능 자원을 무한히 증설할 방법이 없다.
  • 단일 장애 지점이 발생할 위험이 있다.
  • 고성능으로 갈수록 비용이 비싸진다.

이러한 단점은 수평적 확장으로 해결할 수 있다.

 

수평적 확장(Scale Out) - 샤딩

수직적 확장과는 다르게 더 많은 데이터베이스 서버를 추가하는 방법이다.
데이터베이스의 수평적 확장은 샤딩이라고 부른다.

샤딩은 데이터베이스를 샤드라고 부르는 작은 단위로 분할하는 기술을 말한다.
모든 샤드는 같은 스키마를 사용하지만 샤드에 보관되는 데이터에는 중복이 없다.

샤딩은 사용자 데이터를 어느 샤드에 저장할지 샤딩 key를 통해 결정하기 때문에 샤딩 key가 아주 중요하다.
예를 들어 user_id % 4를 해시 함수로 사용하면 각 샤드에는 다음과 같이 데이터가 저장된다.

결정한 샤딩 key에 따라 데이터가 어떻게 분산될지 결정되므로 분산 데이터베이스 환경에 아주 중요한 요소로 작용한다.

올바른 샤딩 key로 적절한 데이터베이스에서 데이터 조회나 변경이 처리되면 효율을 높일 수 있지만, 사딩 key가 잘못되어 각 샤드에서 데이터 불균형이 일어나면 오히려 성능이 떨어질 수 있다.

샤딩은 데이터베이스 규모 확장을 실현하는 좋은 기술이지만, 샤딩을 도입하면 시스템이 복잡해지고 풀어야 할 새로운 문제도 생긴다.

 

샤딩 도입 시 발생할 수 있는 문제

데이터의 재 샤딩

데이터가 너무 많아져 하나의 샤드로 감당이 어렵거나, 데이터 분포 불균형으로 인한 샤드 소진이 일어나는 경우 샤드 key를 계산하는 함수를 변경하고 데이터를 재배치해야 한다.
이 문제는 안정 해시 기법을 활용하면 해결할 수 있다.

 

유명인사 문제

특정 샤드에 질의가 집중되어 서버에 과부하가 생기는 문제이다.
예를 들어 SNS 서비스를 구성하는 시스템에 BTS, 블랙핑크 같은 유명인사가 전부 같은 샤드에 저장되는 데이터베이스가 있다고 생각해보자.

유명인사가 저장되지 않는 샤드에는 부하가 없지만, 유명인사를 담고 있는 샤드에는 엄청난 read 연산으로 인해 과부하가 생기게 된다.

단순히 user_id로 샤딩 key를 구성했다면 이러한 문제를 해결할 수 있을까?
이 문제를 풀려면 유명인사를 각 샤드에 분산시켜 할당할 수 있는 전략이 필요해진다.

 

조인과 비정규화

하나의 데이터베이스를 여러 개의 샤드로 분리하고 나면, 분산된 데이터를 조인하기 힘들어진다.
이를 해결하는 방법은 데이터베이스를 비정규화하여 하나의 테이블에서 질의가 수행될 수 있도록 하는 것이다.

 

시스템 구성하기

앞서 설계했던 시스템 구성에 데이터베이스 샤딩을 적용하면 다음과 같다.

 

백만 사용자 이상 시스템 구성하기

시스템 규모 확장은 지속적이고 반복적인 과정이다.
앞서 살펴본 방법들을 잘 활용하고 반복하다 보면 우리는 원하는 규모의 시스템을 달성할 수 있다.
하지만 수백만 사용자 이상을 지원하려면 시스템 최적화나 더 작은 단위의 서비스 분할 등의 새로운 전략이 필요할 수 있다.

 

핵심 정리

앞서 살펴본 시스템 규모 확장을 위해 살펴본 기법들을 다시 한번 정리해보면 다음과 같다.

  • 웹 계층은 무상태 계층으로 구성한다.
  • 모든 계층에 다중화를 도입한다.
  • 캐시를 적극 활용해 가능한 많은 데이터를 캐시 한다.
  • 여러 데이터 센터를 지원해 지리적 라우팅을 지원한다.
  • 정적 콘텐츠(이미지, 동영상 등)는 CDN을 통해 서비스한다.
  • 데이터 계층은 샤딩을 통해 규모 확장을 고려한다.
  • 각 계층은 독립적 서비스로 분할한다.
  • 시스템을 지속적으로 모니터링하고, 자동화 도구를 적극 활용한다.
반응형