서버는 마치 도시의 한복판에 세워진 단 하나의 식당과 같습니다. 만약 수천만 명의 손님들이 동시에 그 식당을 찾는다면, 식당은 갑작스러운 손님의 쇄도에 제대로 대응하지 못할 것입니다.
이처럼 단일 서버에 엄청난 양의 트래픽이 몰릴 경우, 서버는 그 부하를 감당하기 어려워집니다.따라서 쏟아지는 트래픽을 여러 대의 서버로 분산
해주는 기술이 필요하고, 이 기술이 바로 로드밸런싱
입니다.
이처럼 사업의 규모가 확장되고 클라이언트 수가 늘어나 기존 서버만으로 정상적인 서비스가 불가능하게 되었을 때, 이 문제를 해결하는 첫 번째 방법은 스케일-업(Scale-Up)
입니다. 이는 식당의 주방을 확장하고, 더 많은 요리사와 웨이터를 고용하는 것과 비슷합니다. 즉, 서버의 하드웨어 성능을 향상
시켜 더 많은 요청을 처리할 수 있도록 하는 방식입니다.
두 번째 방법은 스케일-아웃(Scale-Out)
입니다. 이 방법은 전 세계 여러 지역에 동일한 식당을 여러 개 오픈하는 것에 비유할 수 있습니다. 즉, 여러 대의 서버를 추가
해 부하를 분산시키고, 각 서버가 더 작은 양의 트래픽을 처리하도록 하는 방식입니다.
스케일-업은 비용이 많이 들고 한계가 있을 수 있으며, 스케일-아웃은 시스템 관리가 복잡해질 수 있지만 더 높은 확장성을 제공합니다. 따라서, 실제 상황에서는 두 방식을 적절히 혼합하여 사용하는 것이 일반적입니다.
스케일-아웃(Scale-Out) 방식으로 서버를 증설하기로 결정했다면, 여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요합니다.
정적 부하분산 Static Load Balancing
입력받은 요청을 각각의 서버에 순서대로 분배하기 때문에 알고리즘이 단순하고 가장 많이 사용되는 로드밸런싱 기법입니다. 모든 서버의 스펙이 동일하거나 비슷한 스펙을 가지고 있고, 서버어와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합합니다.
클라이언트의 IP주소를 특정 서버에 매핑하여 요청을 처리하는 방식입니다. 사용자의 IP를 해싱(Hashing)하여 로드를 분배하기 때문에 클라이언트가 항상 동일한 서버로 연결되는 것을 보장합니다.
해싱(Hashing): 임의의 길이를 지닌 데이터를 해시 함수를 이용해 고정된 길이의 데이터로 매핑하는 것.
동적 부하분산 Dynamic Load Balancing
서버마다 다른 가중치를 부여하여, 더 높은 가중치를 가진 서버에 더 많은 요청을 배분합니다. 이는 서버의 처리 능력이 서로 다를 때 유용하게 사용됩니다.
요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽을 배분합니다. 세션 유지시간이 길거나 서버에 분산된 트래픽이 일정하지 않은 경우에 적합한 방식입니다.
클라이언트 요청을 전달하기 전 각 서버에 응답을 요청하고 응답시간이 가장 짧은 서버에 클라이언트 요청을 전달합니다. 각 서버의 성능이 상이할 경우 적합한 방식입니다.
로드밸런서는 스케일-아웃 방식에서 사용되는 장치로, 네트워크 트래픽을 여러 서버에 고르게 분산시켜 시스템의 부하를 균등하게 관리하는 장치입니다.
위에서 얘기한 비유를 이어 나가자면, 로드밸런서는 마을 입구에서 손님들을 맞이하여 각자에게 가장 적합한 분점을 안내합니다. 마치 교통 경찰이 교통 흐름을 조절하는 것과 같습니다. 이렇게 각 분점으로 손님들이 균등하게 분산되어, 모든 분점이 효율적으로 운영될 수 있도록 합니다.
이처럼 스케일-아웃과 로드밸런싱은 마을의 식당이 갑작스런 손님 증가에 효과적으로 대응할 수 있도록 도와주며, 전체 시스템의 안정성과 효율성을 높여줍니다.
로드밸런서의 종류는 OSI 7계층 모델을 기준으로 부하를 어떻게 분산하는지에 따라 구분됩니다. 2계층을 기준으로 부하를 분산한다면 L2 로드밸런서입니다.
여기서 L3 로드밸런서는 L3 계층만을 분산하는 것이 아니고 L2, L3 두 계층 모두 부하를 분산합니다.
상위 계층으로 갈수록 섬세한 부하 분산이 가능하고, 가격이 비싸집니다.
여기서 L4, L7 로드밸런서가 가장 많이 활용
되는데, 그 이유는 L4 로드밸런서부터 포트(Port)정보를 바탕으로 로드를 분산하는 것이 가능하기 때문입니다. 한 대의 서버에 각기 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드밸런서 이상을 사용해야만 합니다.
패킷의 헤더 정보만을 이용하기 때문에 처리 속도가 빠릅
니다.
애플리케이션 계층의 정보를 활용하지 못해 기능 및 유연성이 제한적
입니다.
온라인 게임, 스트리밍 서비스 등 실시간 트래픽 처리가 중요한 서비스
에 적합합니다.
다양한 기능 및 유연성을 제공
합니다.
요청 내용을 분석하여 특정 요청을 특정 서버로 전달하거나, 캐싱 및 압축 등의 다양한 기능을 구현할 수 있습니다.
처리 속도가 상대적으로 느립
니다. 패킷의 애플리케이션 계층 정보를 분석해야 하기 때문에 L4 로드 밸런서보다 처리 시간이 더 걸리게 됩니다.
웹 서비스, API 게이트웨이, 콘텐츠 전송 네트워크(CDN) 등 애플리케이션 레벨의 로드 밸런싱이 필요한 서비스
에 적합합니다.
스위치는 기본적으로 네트워크 내의 장비들 사이에서 데이터 패킷을 전달하는 역할을 하지만, 일부 고급 스위치(특히 L4, L7 스위치)는 로드밸런싱 기능을 포함함으로써 로드밸런서 라고 할 수 있습니다.
Source IP와 Destination IP를 변조
하며, 다중화된 서버에 트래픽을 중계
합니다.커넥션을 생성
하고 관리
합니다.트래픽 내용(URI, Payload, Cookie, HTTP 헤더 등)을 직접 분석
합니다.패킷 필터링
기능을 수행할 수 있습니다.자원 소모
가 L4 스위치에 비해 큽니다.적절한 목적지로
보내줍니다.로드밸런싱
기능을 수행합니다.L4 스위치
는 중계된 서버와 클라이언트간 연결 성립 과정(3-Way HandShake)
을 통해 하나의 세션을 생성합니다.L7 스위치
는 클라이언트와 스위치, 스위치와 서버간 연결 성립 과정(3-Way HandShake)
을 거쳐 독립된 TCP 세션을 생성합니다.L7 스위치는
패킷, 페이로드의 분석을 통해 패킷 필터링
기능을 수행할 수 있다.L4 스위치
에서 IP Hash
방식으로 로드밸런싱을 수행할 경우 특정 서버에 요청이 집중될 수 있습니다.