로드 밸런싱은 네트워크나 서버에 가해지는 부하(Load)를 분산해주는 기술로, CPU 혹은 Data storage와 같은 컴퓨터 자원에 작업을 나누는 것을 의미한다. 이를 통해 가용성과 응답시간 등을 최적화할 수 있다.
로드 밸런싱은 여러 대의 서버를 두고 서비스를 제공하는 분산 처리 시스템
에서 필요한 기술이다. 일반적으로 서비스에 접속하는 클라이언트의 수가 늘어나게 되면 그에 따라 서버의 확장이 필요하게 되는데, 이때 대처 가능한 방법은 크게 Scale-out과 Scale-up 두 가지이다. 이에 대한 자세한 사항은 뒤에서 다룰 것인데, 간단히 정리하면 다음과 같다.
이때 Scale-out을 통해 서버를 확장할 경우 여러 대의 서버에 대하여 부하(트래픽)를 균등하게 분산해 주는 로드 밸런싱이 반드시 필요하다.
로드 밸런서는 로드 밸런싱 기술을 제공하는 서비스 혹은 장치를 말하며, 클라이언트와 네트워크 트래픽이 집중되는 서버들 혹은 네트워크 허브 사이에 위치한다.
서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식으로, 여러 대의 서버가 동일한 스펙을 가지고 있으며 서버와의 연결(세션)이 오래 지속되지 않는 경우 적합하다.
각 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분하는 방식이다. 주로 서버의 트래픽 처리 능력이 상이한 경우 사용된다.
클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식으로, 사용자의 IP를 해싱해 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되도록 할 수 있다.
요청이 들어온 시점에 가장 적은 연결 상태에 있는 서버에 우선적으로 트래픽을 배분하는 방식으로, 세션이 길어지는 경우가 많거나 서버에 분배된 트래픽이 일정하지 않은 경우 적합한 방식이다.
서버의 현재 연결 상태와 응답 시간(response time: 서버에 요청을 보내고 최초의 응답을 받을 때까지의 소요 시간)을 모두 고려하여 트래픽을 배분하는 방식이며, 연결 상태가 가장 적고 응답 시간도 가장 짧은 서버에 우선적으로 로드를 배분한다.
스케일 아웃은 서버 자체를 추가함으로써 확장하는 방식을 말한다. 기존의 서버와 비슷한 사양의 서버를 추가로 연결함으로써 데이터 용량을 증가시키고 성능을 향상시키는 것이다.
서버를 추가로 확장하기 때문에 수평 스케일링(Horizontal scaling)이라고도 불린다.
스케일 업은 쉽게 말해 서버를 기존 서버보다 높은 사양으로 업그레이드하는 것을 말한다. CPU나 메모리를 업그레이드하는 방식 혹은 서버에 디스크를 추가하는 방식 등이 이에 해당한다. 소프트웨어적으로는 AWS의 EC2 인스턴스 사양을 micro에서 small로, small에서 medium으로 높이는 것이 해당할 것이다.
하나의 서버가 가진 능력을 증강하는 것으로 수직 스케일링(Vertical scaling)이라고도 한다.
스케일 아웃 | vs | 스케일 업 |
---|---|---|
하나의 서버에서 처리하던 일을 여러 서버에서 나눠서 처리 수평 확장으로서 지속적인 확장이 가능 | 확장성 | CPU 혹은 RAM 변경, Data storage 추가 등으로 서버의 성능을 높임 성능 확장에 한계가 있음 |
성능 증가에 따른 비용의 증가 폭이 큼 | 비용 | 비교적 저렴한 서버 사용으로 비용의 부담이 적음 |
하나의 서버에 부하가 집중되므로 장애 영향도가 큼 | 장애 | 부하가 여러 대의 서버에 분산 처리되므오, 장애 시 전면 장애의 가능성이 낮음 |
전반적으로 스케일 아웃이 스케일 업보다 합리적인 방식으로 보이지만, 무작정 스케일 아웃이 더 낫다고 할 수는 없다. 제공하는 서비스의 종류나 스토리지 용도 등에 따라 적절히 선택하여야 할 것이다.