Scale Up/Out

JINY KIM·2022년 4월 20일
0

한국어론 수평 확장, 수직 확장이라고 부른다.

수직 확장은, 더 큰 용량으로 커진다.
수평 확장은, 더 많은 복제본이 생긴다.

AWS 에 배포한 웹 서버가 있다.

런칭 직후에 사용자가 적어 1vCPU, 2GB 메모리를 가진 가벼운 서버로 운영하고 있었다.
하지만 서비스가 점점 성장하여 해당 스펙으로는 택도 없어졌다.
이제 서버 관리자는 수평 확장을 시도할지, 수직 확장을 시도할지 정해야한다.

수직 확장의 경우
2vCPU, 4GB 램을 가지는 더 우수한 성능의 환경에서 서버를 구성한다.

수평 확장의 경우
1vCPU, 2GB 메모리를 가진 서버를 하나 더 만들어 사용자 요청을 나눠서 처리한다.

수직 확장을 시도하려 하지만 쉽지 않다. 24시간 켜져있어야 하는 서버의 전원을 내리지 않고 하드웨어 용량을 늘려야 하기 때문이다.

수평 확장을 시도하려 해도 쉽지는 않다. 새로운 서버를 열고, 요청을 분산하려고 해도 어떻게 해야 할지 눈 앞이 깜깜하다.

이 때, 제일 일반적인 해결책은 리버스-프록시이다. 흔히 로드밸런서라 부른다.

Nginx 와 같은 프로그램을 통해 요청을 받고, 실제 계산이 이루어 지는 서버로 중계해준다.

위와 같이 구성할 수 있다. 새로운 서버를 하나 띄우고, 완료 이후 Nginx 설정을 변경한다. 기존 OLD 서버로 가는 요청들을 새 서버로 옮겨가고, 예전 서버는 내리면 된다. 유저 입장에서는 서버가 내려간 적이(DOWNTIME) 없다.

수평 확장의 경우엔 더 간단하다.

현재 Nginx 에 연결되어 있는 서버는 3대이다. 요청이 들어오면 Nginx는 무작위로 서버 1,2,3 중 하나로 요청을 중계한다. 만약에 요청이 너무 많이 들어오게 된다면 서버를 3대가 아닌 4대, 5대로 늘려가며 쉽게 대응이 가능하다.

반대로, 요청량이 줄어들게 되면 3대인 서버를 2대, 1대로 줄여가며 비용을 절약할 수 있다.

수평 확장이 편하고, 유연해 보이지만 아닌 경우도 많다.
우선 새 업데이트를 배포 할 때 마다 매 서버를 다 업데이트 해주어야 한다. 어떤 패치의 경우에는 한번에 적용되어야 하는 경우도 있을텐데, 서버 관리자는 역시 눈앞이 깜깜해지고 있다.

도커의 등장

위 두 경우 모두 쉽지만은 않다. 서버의 확장성을 고려하는 것이 그리 간단치 않다.
서버를 새로 띄워야 하는데, 환경 설정이라도 잘못 만지게 되면 큰 사고로 이어질 수 있다.
그래서 등장한 도커는, 기본적으로 VM 과 굉장히 유사하다.

모든 프로그램과 환경 등을 선언형으로 관리하여 환경 설정 시 실수할 여지를 크게 줄이고, 서버 Initiating 과정을 크게 간략화한다.

도커를 선두로 한 컨테이너 배포 환경은 수평 확장에 엄청난 간편함을 가져다 주었다. 배포 단계를 획기적으로 줄여서, 실수할 여지를 낮추고, 수평 확장/축소의 유연함을 한층 더 올려주었다.

Kubernetes 를 통해서 한 대의 서버 내에서도 수평 확장과 축소를 쉽게 제어할 수도 있지만, 컨테이너 배포 환경에 대해서는 나중에 자세히 다뤄볼 예정이다.

사용 예시

가장 일반적이고, 간단한 수평 확장의 예시는 AWS 의 ECS 를 예시로 들 수 있다.

어떤 서비스에 들어오는 요청이 점차 많아지고 있고, 심지어 시간대나 계절에 따라서도 변화가 크다고 가정해보자.

ECS 의 AutoScaling 기능은 밤잠 설치는 서버 관리자의 고민을 굉장히 간단하게 덜어준다. 요청이 많이 들어오고, 서버의 부하가 올라갈때 자동으로 Instance 개수를 조절해준다. 요청이 적게 들어올때는 개수를 줄여 비용을 절감할 수 있다.

가장 일반 적인 수직 확장의 예시는 AWS 의 AuroraDB 를 예시로 들 수 있다.
DB 는 특성 상 수평 확장이 쉽지 않다. 데이터 저장소이기 때문에 Clustering 등의 복잡한 과정 없이는 각각의 Instance 간의 정보 공유가 굉장히 어렵기 때문이다.

AuroraDB with Serverless 환경에서는 아주 간단하게(사용자입장) 수직 확장을 지원한다.

요청이 적은 런칭 초창기에는 낮은 성능의 하드웨어에서 DB 를 구성하다가, 점차 요청이 증가한다면 더욱 높은 성능의 하드웨어에서 DB 를 구성할 수 있다. 해당 과정은 AWS 에서 지원해주기 때문에 간단하게 클릭 몇번으로 DB 성능을 제어할 수 있다. (수치를 기반으로 자동으로 조절해주는 기능도 물론 있다)

profile
엔지니어 지망생

0개의 댓글