Project

대용량 트래픽을 위한 서버확장(Scale up과 Scale out)

수여닝 2021. 7. 20. 21:36

우리나라 대표적인 어플인 배달의 민족이나 카카오톡 등 많은 사용자를 어떻게 다 받아낼 수 있을까?

현재 내가 만들고 있는 프로젝트가 성공해서, 내가 만들었던 프로젝트를 이용하는 사람들이 많아져서 현재 사용중 인 서버로 많은 사용자들을 감당하지 못하는 경우가 생기면 어떻게 될까?

그런 생각으로 찾아본 두가지 방법에 대해 이야기하려고 합니다.

 

 


 

스케일 아웃과 스케일업

출처:http://library.gabia.com/wp-content/uploads/2016/03/hosting-160324-002.jpg

 

 

Scale up(스케일 업) =  수직 스케일

현재 사용중인 서버 자체의 성능을 증가시키는 방법을 말합니다.

즉, 서버에 CPU나 RAM등을 추가하거나 고성능의 부품으로 서버를 교환하는 방법을 통해 서버의 성능을 증가시키는 방법입니다.

 

이 방법은 어떤 점에서 좋고 어떤 점이 좋지 않을까요?

장점

  •  구축 설계가 쉬운 편입니다. (하드웨어를 추가하거나 교체하는 작업이기 때문에 어렵지 않습니다)
  • 서버가 하나이기 때문에 서버가 여러 개 있을 때 생기는 데이터 일관성이 깨지는 문제가 발생하지 않습니다.
  • 컨트롤러나 네트워크 비용이 별도로 발생하지 않습니다.

단점

  • 서버 한 대에 모든 부하가 집중되어서 장애 시 영향을 크게 받을 수 있습니다.
  • 성능 확장에 한계가 있습니다. (하드웨어 장비의 허용범위 내에서만 사용할 수 있기 때문입니다.)
  • 하드웨어 장비를 업그레이드해야 해서 비용이 많이 듭니다.

이런 점이 있는 데, 그러면 어떤 경우에 scale up을 사용하는 것이 적절할까요?

  • 빈번히 데이터의 갱신이 발생하는 경우( 정합성이 어려운 경우)
  • OLTP(온라인 트랜잭션 처리)
  • 데이터베이스 서버

 

이런 경우에 scale up을 사용합니다

 

더보기

정합성: 어떤 데이터들의 값이 서로 일치함

OLTP: 여러 과정(연산)이 하나의 단위 프로세스로 실행되도록 하는 프로세스


 

그렇다면, scale out은 무엇일까요?

Scale out(스케일 아웃) = 수평 스케일

비슷한 사양의 서버를 여러 대 추가하여 서버를 확장하는 방식을 말합니다.

서버가 한 대에서 여러 대가 되기 때문에 각 서버에 걸리는 부하를 균등하게 해주는 '로드밸런싱'이 동반되어야 합니다.

(단일 서버에 작업이 쌓여 멈춰 있는 병목현상을 줄일 수 있습니다)

더보기

로드밸런싱: 네트워크 또는 서버에 가해지 는 부하를 분산해주는 기술

 

장점

  • 하나의 서버가 장애로 인해 다운되어도 다른 서버로 서비스를 제공할 수 있습니다. 즉, 장애 가능성이 적어진다는 것입니다.
  • 지속적인 확장이 가능합니다.
  • 비용이 상대적으로 저렴합니다.

단점

  • 관리할 서버가 늘어나서 추가적인 소프트웨어 라이선스 비용이 듭니다.
  • 설계가 힘듭니다.
  • 모든 서버에서 데이터 일관성을 유지할 수 있게 해야 합니다.
  • 로드밸런서가 필요합니다.

 

이런 점들이 있는 Scale out은 언제 사용하는 게 좋을까요?

  • 모든 서버가 동일한 데이터를 가지고 있어야 해서 데이터 변화가 적은 웹서버

 

 

 


 

 

 

두 가지 방법의 장단점을 고려해서 자신에게 맞는 방법을 선택해서 서버를 확장시켜야 합니다.

내가 현재 만들고 있는 서비스의 특징을 생각해서 장단점을 비교해서 방법을 정했습니다.

 

많은 사람들이 나의 서비스를 이용한다고 했을 때, 생길 수 있는 문제를 정해 장단점을 비교했습니다.

 

첫 번째, 장애 가능성이 더 적은 방법은 무엇인가?

Scale up은 하나의 서버에서 부품을 교체하고 추가해서 서버를 늘리는 방법이고 Scale out은 여러 대의 서버를 두는 방법입니다.

이 경우에, 한 서버가 다운될 경우 Scale up은 대신할 서버가 없지만 Scale out은 대신할 수 있는 서버가 존재합니다. 그리고 서버에 가해지는 부하를 잘 분산시켜준다면 서버가 다운되는 일은 적어질 것입니다.

그래서 상대적으로 장애 가능성이 적은 방법은 Scale out입니다.

 

두 번째, 서비스가 성공해서 많은 사람들이 사용했을 때, 서버 확장의 한계는 없을까?

Scale up은 하드웨어의 허용범위 내에서 서버를 확장할 수 있다. 더 좋은 부품이 없다면 확장이 불가능합니다.

반면에 Scale out은 서버를 여러 대 두는 방법으로 확장이 계속 가능합니다.

 

이런 장단점을 비교해서 나는 내 프로젝트에 Scale out을 선택했습니다.

하지만 Scale out을 선택하면 생길 수 있는 문제를 해결해야 하는데, 그 문제를 해결하는 방법에 대한 내용은 다음 포스트에 정리할 예정입니다.