1. 대용량 트래픽을 처리하는 서버 아키텍쳐에 대한 학습
이 글은 내가 온라인 거래 중개 서비스의 API서버를 개발하면서 대용량 트래픽에 대한 학습과 고민의 결과를 정리한 것이다. 학습 목표는 백엔드 개발자로써 대용량 트래픽을 처리하며 신뢰할 수 있고 유지보수성이 좋은 API 서버를 개발하기 위한 기본적인 역량을 갖추는 것이다.
2. 대용량 트래픽을 처리하는 것이 왜 중요한가?
IT 서비스는 트래픽으로 수익을 발생시키기 때문이다. 대단히 좋은 제품을 개발하였지만 단 1만명만 사용가능한 경우 1만명에 근접 할수록 속도가 느려지고 그 이상이 될 경우 서버가 다운될 것이다. 이 제품은 처리 가능한 트래픽까지 사용자를 받을 수 있다. 그렇다고 무작정 서버를 과하게 증설하면 컴퓨터 자원을 낭비하는 것이기 때문에 모니터링을 통해 필요 시 확장하는 것이 중요할 것이다.
3. 서버 확장 방법
서비스의 사용자가 점차 늘어나고 서버에 가해지는 부하가 커지면 메모리와 디스크 등 자원이 부족해진다. 이는 곧 서비스 장애로 이어진다. 이를 예방하기 위해서는 서버 컴퓨터의 메모리와 디스크, CPU 등을 더 좋은 것으로 교체하거나 여유 슬롯에 추가하는 것이다. 그리고 슬롯이 부족해지면 서버 컴퓨터 자체를 더 상위 제품으로 교체할수도 있다. 이를 Scale up이라고 한다. 이와 다르게 Scale out은 서버의 개수를 늘려 좀 더 많은 트래픽을 감당하는 방법이다.
이 두가지 방법은 함께 사용할 수 있으며 상황에 따라 선택하면 된다. 하지만 여기서는 한대의 서버를 Scale up하느냐 적정한 수준의 서버를 Scale out하는가에 대한 비교와 선택을 한다.
Scale up의 장점
- 한대의 서버 컴퓨터를 업그레이드 하기 때문에 서버의 개수가 늘어나느 것보다 관리와 확장이 상대적으로 쉽다.
- 서버끼리의 네트워크 비용이 추가로 들지 않는다.
Scale up의 단점
- 하드웨어의 성능이 높아질수록 가격이 매우 높아진다.
- 서버를 교체하거나 서버 운영체제를 업데이트하는 등 서비스를 일시 중단할 경우가 생길 수 있다.
- 서버 컴퓨터의 하드디스크나 램에 결함이 생기거나 정전이나 네트워크 케이블이 끊기는 등 서버의 장애가 생길 경우 모든 서비스가 중단된다.
Scale out의 장점
- 일부 서버에 장애가 발생하여도 남은 서버에서 트래픽을 처리할 수 있기 때문에 모든 서비스의 중단으로 이어지지 않는다.
- 서버를 확장할 때 서비스를 일시 중단할 필요가 없다.
- 가격 대비 성능이 준수한 서버 컴퓨터를 여러 대 구입할 수 있어 하나의 컴퓨터만 고수하는 것보다 상대적으로 비용을 효율적으로 사용할 수 있다.
Scale out의 단점
- 여러 개의 서버에 트래픽을 분산시켜주는 로드밸런싱에 대해 잘 이해하고 있어야 한다.
- 서버 노드 간 네트워크 통신 비용이 추가로 발생한다.
- 세션은 서버에 저장되고 모든 서버 노드가 세션을 공유하지 않기 때문에 세션 관리를 추가로 해주어야 한다.
- 서버 노드 간 동시성 문제를 해결해야 한다.
- 시스템이 광범위해져 유지보수와 디버깅 등 관리 포인트가 증가한다.
4. 결론
위에서 언급하였지만 Scale up과 Scale out은 양자택일이 아니라 상황에 맞게 사용할 수 있는 두가지 확장 방법이다. 하지만 학습하는 관점에서 두가지 방법을 비교하기 쉽게 Scale up을 선택할 경우 하나의 서버만 사용한다는 가정을 하였다. 이를 토대로 나의 서비스에 맞는 방법을 택하겠다.
현재 개발중인 서비스는 온라인 거래 중개 서비스이다. 이는 항상 거래가 가능해야 하기 때문에 일부 서버에 장애가 생겨도 모든 서비스가 중단되면 안된다. 또한 연말과 같이 트래픽이 매우 급증할 수 있는 상황을 대비해 미리 서버를 증설할 때에도 서비스가 중단되면 안된다. 한마디로 고가용성이여야 한다. 따라서 Scale out이 좋은 방법이 될 것이다.
또한 한대의 서버로 Scale up만 할 경우 서버 교체 비용에 비해 성능 증가폭이 낮아지기 때문에 결국은 Scale out을 고려할 수밖에 없다.
물론 Scale out은 여러 서버를 관리해야 하고 로드 밸런싱에 대한 이해와 동시성 문제를 잘 다룰 수 있어야 한다. 또한 시스템이 광범위해져 디버깅하기 어려울 것이다. 이러한 단점은 충분히 극복할 수 있기 때문에 Scale out을 선택하였다.
대용량 트래픽을 처리하는데 중요한 서버 확장 방법에 대해 잘알아야되고 분산 서버 아키텍처 환경에서 개발할 때 여러가지 문제들이 발생할 수 있으니 이러한 것들에 대해 잘 학습해야한다고 생각한다.
'시스템 설계' 카테고리의 다른 글
분산 서버에 부하를 고르게 분산하는 방법 (0) | 2021.03.28 |
---|