성능이나 용량 증강을 목적으로 하나의 서버에 디스크를 추가하거나 CPU나 메모리를 업그레이드시키는 것을 말한다. 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고도 한다.
즉, 기존의 하드웨어를 보다 높은 사양으로 업그레이드하는 것을 말한다.
기존의 서버와 같은 사양 또는 비슷한 사양의 서버 대수를 증가시키는 방법으로 처리 능력을 향샹시키는 것을 말한다. 스케일 아웃 방식을 "수평 스케일"이라고 부르기도 하고, 확장이 스케일 업보다는 다소 유연하다.
'1’의 처리 능력을 가진 서버에 동일한 서버 4대를 더 추가하여, 총 ‘5’의 처리 능력을 만드는 것이다. 서버가 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 ‘로드밸런싱’이 필수적으로 동반되어야 한다.
즉, 여러 대의 서버가 분산(나누어) 처리할 수 있도록 요청을 나누어주는 서비스
로드 밸런싱: 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리한다.
스케일 업과 스케일 아웃은 왜 생겼을까?
예전에 서비스가 하나 있었다. 사용자가는 한 명 이였고 서버는 잘 돌아가고 있었다.
Client -> Server
하지만 점점 사용자가 늘어났다.
Client1, Client2, Client3, Client4, Client5........Client100 -> Server
늘어남에 따라 서버는 부하가 생겼다. 이에 따라 개발자들은 이 부하를 어떻게 하면 좋을까? 고민을 한 결과,
"Scale up!, Server의 하드웨어 성능을 높여보자" 라고 생각을 하였다. 메모리도 때려넣고, CPU도 때려넣고 해서Server는 Lv10.Server로 레벨 업을 하였다.
요청을 잘 전달하고 소화를 하고 있엇는데, 점점 또 늘어나다가 결국Client101, Client102, Client103, Client104, Client105........Client100000이 되어버려서 Lv100.Server을 만들자 라고 생각을 하였다. 하지만 메모리를 꼽을 수 있는 소켓은 한정적이였다.
그래서 어떤 개발자가 또, 우리 그럼 "Scale Out!, 여러 대의 Server가 나누어 일을 하게 하자" 라고 생각을 하였다. 그리하여 위에 첨부한 그림의 스케일 아웃이 되었다.
추가적인 네트워크 연결 없이 용량을 증강할 수 있고, 추가되는 용량이나 업그레이드 비용만 부가되기에 비용적인 증강이 스케일아웃에 비해 낮고 설계가 쉽다.
무엇보다 비교적 업그레이드가 쉽고, 필요 장비와 전력 소모를 어느 정도 아낄 수 있다.
인프라 비용이 추가로 발생하지 않는다.
서버를 추가하는 방법이 아니기 때문에 여러대의 서버를 두는 것보다 데이터 정합성 이슈(데이터가 일관되지 않는 문제)에서 자유롭다.
다만 스케일업을 할수록 기존 하드웨어의 냉각, 공간, 전력공급 등의 문제가 발생할 수 있고, 하드웨어 허용 범위 내에서만 확장이 가능하기 때문에 그 이상으로 업그레이드를 하고자 한다면 한계가 있다.
새로운 장비로 교체하는 방법밖에 없음
스케일 업의 일정 수준을 넘어가는 순간, 성능 증가 폭이 미미해진다.
cpu 의 예를 들자면, i3 에서 i5로 스케일업하는 경우, 1.5배 이상의 성능 변화가 있는 반면, i5 에서 i7로 스케일업하는 경우, 1.2 배의 성능 변화밖에 없다
.서버 한 대에 모든 부하가 집중되므로 장애 시 서버가 복구될 때까지 서비스를 중단해야 하는 상황이 발생한다.
내가 사용하려던 서비스가 중단된다면, 그에 안좋은 기억이 생기고 타 서비스로 이용을 바꾸거나, 서비스를 사용하지 않을 수 있는데, 이것은 엄청난 비즈니스 손실이 생길 수 있다.
사용하기 적절한 예
한 대의 서버에서 모든 데이터를 처리하므로 데이터 갱신이 빈번하게 일어나는 ‘데이터베이스 서버’에 적합한 방식이다.
서버 한 대가 장애로 다운되더라도 다른 서버로 서비스 제공이 가능하다는 장점이 있다.
용량, 성능 확장에 한계가 없다. 하드웨어를 변경하는 것이 아닌 비슷한 성능의 서버를 여러 대 두는 방법이기 때문에, 확장이 무제한 가능하다.
즉, 단일 서버에 작업이 쌓여서 멈춰있는 병목현상을 줄일 수 있다.
여러 대의 서버로 돌아가기 때문에 데이터 정합성 이슈(데이터가 일관되지 않는 문제)가 생길 수 있다. 그에따라 모든 서버에서 데이터 일관성을 유지해야하기 때문에 설계 및 관리가 복잡하다.
세션, 웹 이미지 등 서버에 저장되는 데이터를 어떤식으로 공유해야할지에 대한 기술적인 한계가 있다. 병렬 컴퓨팅 환경을 구성하고, 유지하려면, 로드 밸런싱에 대한 높은 이해도가 요구된다.
병렬 컴퓨팅 환경: 여러 개의 프로세서를 통해 하나의 프로그램을 처리하는 환경
사용하기 적절한 예
네트워크 서버 설계 및 소프트 웨어 변경 비용이 더 클 수 있기 때문에 모든 서비스에 적합한 방식은 아니고 클라우드 환경 및 대규모 서비스 환경에서 권장되는 방법이다.