본문 바로가기

Dev.World/개발상식&언어

[개발상식] 9. Scale Up/Out & Sharding



mongoDB에 대해서 알아보다가 Sharding이 무엇인지 궁금해졌다.

그러다가 Scale out이 무엇인지 또 궁금해지고 up도 궁금해진거다. 끝이 없다.

Scale up / Scale out

Scale Up이란 서버 그 자체를 증강하는 것에 의해서,
즉 리소스를 붙여서 용량을 키워 처리 능력을 향상시키는 것이다.
프로세서 자체를 고성능 모델, 고가의 장비로 옮겨놓는 것을 가리킨다.
스케일 업은 수직 스케일로 불리기도 한다.

Scale Out이란 접속된 서버의 대수를 늘려 처리 능력을 향상시키는 것이다.
서버의 가상화 기능을 사용하고 하나의 케이스 내에서 가상적으로 복수 서버를 구축해
스케일 아웃과 동등의 효과를 제공할 수도 있다.
이러한 방식을 특히 스케일 위드인 가상스케일아웃 이라고 부르기도 한다.
스케일 아웃은 수평 스케일이라고 불리기도 한다.

스케일 아웃은 어떤 경우에 적합할까 ?
높은 병렬성을 실현하기 쉬운 경우
즉, 다수의 요구를 동시 병행으로 처리할 필요가 있지만 개개의 처리는 비교적 단순한 경우 적합하다.
읽기 전용인 스케일 아웃 환경에 있어서는 처리 능력 향상과 가용성 증대라는 이점도 존재한다.
하나의 서버가 장애를 일으켜도 다른 서버로 즉시 처리를 계속할 수 있기 때문이다.
스케일 아웃이 유효한 영역에서 스케일 업의 방법을 적용할 수 있다.
그러나 일반적으로 스케일 업은 스케일 아웃보다 비용이 높기 때문에 선호되지 않는다.

하지만 스케일 아웃에서는 제대로 처리 능력을 향상할 수 없는 애플리케이션 영역이 존재한다.
하나의 이미지 데이터베이스에 대해서 빈번히 갱신이 발생하는 온라인 트랜잭션 처리(OLTP)이다.
이 경우에는 OLTP계의 애플리케이션에 대해 스케일 아웃의 방법으로 서버를 추가해도 처리 능력은 비례하여 증가하지 않는다.
오히려 저하해 버리는 것조차 존재한다.
이럴 경우 스케일 업의 방법이 필요하다.
그리고 스케일 아웃의 단점은 복잡성이다. 개발자라해도 설계/개발에 상당한 시간을 투자해야 한다.
그래서 스케일 아웃을 하기 전에 테이블을 최대한 작게 나눠둔다.

Sharding
DB부하가 많을 때 처리하는 기술 로 Scale out 기술 중 하나가 바로 Sharding이다.
샤딩은 데이터 베이스가 저장하고 있는 테이블들을
테이블 단위로 분리하는 수직샤딩과
테이블 자체를 분할하는 수평 샤딩이 있다.
구체적인 예로 두 샤딩을 비교하자면
수직 샤딩은 연속된 데이터에 대해서 범위별로 데이터를 나누는 방법이다. (연령대별 분할)
수평 샤딩은 연속된 키가 아니라 카테고리와 같은 종류에 따라서 데이터를 수평적으로 분리하는 방법이다. (사용자가 사는 지역별 분할)
이렇게 데이터를 분산 저장할 때 meaningful한 데이터를 사용할 수 있는데 이 경우 데이터 몰림현상이 발생할 수 있다.
그래서 샤딩된 서버의 성능을 비대칭적으로 설계할 수 있다.
 
그리고 관계형 데이터베이스(RDBMS)에서 대량의 데이터를 처리하기 위해서 데이터를 파티셔닝하는 기술이다.
DB 레벨에서 데이터를 나누는 것이 아니라 데이터베이스 자체를 분할하는 방식이다.
따라사 애플리케이션 레벨에서 구현해야 한다.

샤딩과 파티셔팅의 차이점
파티셔닝이란 퍼포먼스, 가용성, 정비용이성을 목적으로 논리적인 데이터 엘리먼트들을 다수의 엔티티(table)로 쪼개는 행위를 말한다.
샤딩은 수평 파티셔닝이라고 할 수 있다.
데이터 베이스를 샤딩하게 되면 기존에 하나로 구성될 스키마를 다수의 복제본으로 구성하고
각각의 샤드에 어떤 데이터가 저장될 지를 샤드키를 기준으로 분리한다.





-..-