서버 분산시스템 서버 확장은 어떻게 하나?(Scale-up vs Scale-out)

devdo·2022년 5월 29일
0

Project

목록 보기
4/11
post-thumbnail

대용량 트랙픽을 견뎌내기 위해서는 기본적으로 서버의 크기를 늘려야 합니다.
하지만 서버의 크기를 늘리는 방법은 두 가지가 있습니다.

바로 Scale-upScale-out 입니다.


1) Scale-up

수직적 확장이라고 불리며 컴퓨터 서버자체의 성능을 업그레이드 하는 방식입니다.

장점

  • 하드웨어적으로 업그레이드를 위해 컴퓨터 부품을 달기만 하면 되기 때문에 상대적으로 쉽고 라이센스 비용 또한 아낄 수 있습니다.

  • 무엇보다 비교적 업그레이드가 쉽고, 필요 장비와 전력 소모를 어느 정도 아낄 수 있기에
    인프라 비용이 추가로 발생하지 않습니다.

  • 서버를 추가하는 방법이 아니기 때문에 여러대의 서버를 두는 것보다 데이터 정합성 이슈(데이터가 일관되지 않는 문제)에서 자유롭습니다.

단점

  • 스케일 업의 일정 수준을 넘어가는 순간, 성능 증가 폭이 미미해집니다.
    (cpu 의 예를 들자면, i3 에서 i5로 스케일업하는 경우, 1.5배 이상의 성능 변화가 있는 반면, i5 에서 i7로 스케일업하는 경우, 1.2 배의 성능 변화밖에 없습니다.)

  • 각 컴퓨터마다 추가적인 부품을 달 수 있는 슬롯이 제한적이고, 장비가 업그레이드 될 때 마다 매번 갈아서 끼울 수 없어 지속적인 확장이 불가능 합니다.
    해결책으로는 새로운 기기를 사용하는 방법인데, 서로 다른 독립적인 기기로 데이터를 옮기기 위해 기존의 데이터를 백업 시킨 후, 데이터 migration을 매번 하는 것은 매우 시간이 오래걸리고 복잡한 작업입니다. 데이터가 방대해지면 더욱 더 그럴 겁니다.

  • 서버 한 대에 모든 부하가 집중되므로 장애 시 서버가 복구될 때까지 서비스를 중단해야 하는 상황이 발생한다.
    사용자입장에서 사용하려던 서비스가 중단된다면, 그에 안좋은 기억이 생기고 타 서비스로 이용을 바꾸거나, 서비스를 사용하지 않을 수 있는데, 이것은 엄청난 비즈니스 손실이 생길 수 있습니다.


2) Scale-out

수평적 확장 이라고도 불리며 추가적인 부품을 다는게 아닌, 새로운 서버를 추가해서 확장하는 방식입니다.

장점

  • Scale-out 역시 소프트웨어의 라이센스 비용이 들어갈 수 있습니다만, 오픈소스를 활용하여 최대한 줄일 수 있는 장점이 존재하긴 합니다.

  • Scale-up 에서 부품 추가의 한계를 극복한 방법으로 필요한 만큼 무제한으로 서버를 추가(서버들의 구성을 : 클러스터라고 한다.)할 수 있어 Scale-up으로 인한 문제에서 자유롭습니다.

  • 트래픽이 많이 몰리는 웹사이트의 경우, 로드 밸런스 기술을 통해 트래픽을 여러 서버로 분산시켜 작동할 수 있도록 설계하는 것이 가능하고 한 서버가 다운이 되더라도 다른 서버가 살아있기 때문에 전면장애의 우려가 매우 낮습니다.

단점

  • 여러 대의 서버를 사용하기 때문에 데이터 불일치 문제가 발생할 수 있습니다. (예를 들어, 사용자1의 로그인 요청을 서버1이 받아 처리를 해서 서버1에는 사용자의 데이터가 존재하지만 서버2에서는 그러한 요청을 받은 적이 없기 때문에 만약 다시 로그인을 시도했는데 서버2가 받았다면 로그인이 안되는 문제점이 발생합니다.)

Scale-out 을 사용할 시 데이터의 불일치를 어떻게 해결할지 꼭 생각을 해봐야 합니다.

  • 병렬 컴퓨팅 환경을 구성하고, 유지하려면, 로드 밸런싱에 대한 높은 이해도 가 요구됩니다.

그래서, Sacle-out 방식은 아무나 할 수 있는 설계방식이 아닙니다.

네트워크 서버 설계 및 소프트 웨어 변경 비용이 더 클 수 있기 때문에 모든 서비스에 적합한 방식은 아니고 클라우드 환경 및 대규모 서비스 환경에서 권장되는 방법인 것입니다.


<ward-study-reservation> 프로젝트에서는 평소에는 서버 트래픽은 잠잠하지만 갑작스런 Reservation을 read 할 request 양이 많아 대용량 트래픽이 있을 수 있다고 판단하여 유연한 서버 확장이 가능한 Scalue-out 방식으로 설계해보았습니다.


출처: https://github.com/f-lab-edu/ward-study-reservation


하지만 Scale-out 은 앞서 언급한 것과 같이 데이터 불일치 문제를 해결해야만 온전히 그 기능을 사용할 수 있습니다. 데이터 불일치 문제를 해결하기 위한 Sticky Session, Session-Clustering, in-memory database 의 대한 정리를 할 것입니다.


다음 글에서 자세히 풀어보도록 하겠습니다. 감사합니다.

참고

profile
배운 것을 기록합니다.

0개의 댓글