Load Balancer
로드 밸런서는 클라이언트와 서버 사이에 위치해, 네트워크 트래픽을 여러 대의 서버에 균등하게 분배하는 역할을 하는 하드웨어 또는 소프트웨어로 정의된 장치를 말한다.
로드 밸런서는 네트워크로부터 모든 요청을 intercept한 다음, 여러 서버에 요청을 나눠 전달하는 역할을 한다. 그리고 서버로부터의 응답을 다시 클라이언트로 전달하는 역할 또한 수행한다. 따라서 로드 밸런서는 cloud-native architecture에서 핵심 역할을 담당한다.
특히, Scale Out을 통해 서버의 수를 늘리려는 경우, 트래픽 분산을 위해 꼭 필요한 장치이다.
Load Balancer의 종류
- Application Load Balancer (ALB)
- Application-level 에서 사용되는 로드 밸런서이다.
- HTTP/HTTPS 트래픽에 적합하다.
- Network Load Balancer (NLB)
- Network Proxy Load Balancer
Load Balancer에 사용되는 알고리즘
알고리즘 종류에 따라 정말 다양한 방식으로 로드 밸런서가 활용될 수 있다. 필요에 따라 스팩을 취사선택하는 것이 적절해보인다. 여기에서는 정적인 방식과 동적인 방식으로 나눠 대표적인 예를 소개한다.
정적 로드 밸런싱
정적 로드 밸런싱의 경우, 고정된 규칙에 의해 알고리즘 세트가 동작하는 방식이다. 따라서 항상 동일한 로직만을 사용한다.
Round Robin
우선 가장 단순한 라운드 로빈 방식을 활용할 수 있다.
만일 서버가 3대가 존재하는 경우, 요청을 Server 1 → Server 2 → Server 3 → Server 1 → Server 2 → ... 처럼 순차적으로 분배하는 방식이다.
Random Select
라운드 로빈 방식처럼 순차적으로 요청을 분배하지 않고, 랜덤하게 분배하는 방식이다. 이때는 동일한 서버에 요청이 연이어 전달될 수 있다.
Weighted Round Robin
기존의 라운드 로빈 방식처럼 단순히 순차적으로 분배하는 것이 아니라, 각 서버마다 가중치를 두어 그에 맞게 요청을 분배하는 방식이다.
예를 들어 Server 1의 스펙이 우수한 경우, Server 1에 가중치를 더 줘서 요청을 더 많이 처리할 수 있도록 분배할 수 있다.
IP Hash
Source IP 주소와 Destination IP 주소를 해싱해, 기존의 non-sticky 트래픽을 고정된 서버에 전달할 수 있는 방식이다. 따라서 서버(Destination)가 사용가능 한 경우, 동일한 클라이언트(Source)의 요청은 항상 동일한 서버(Destination)에 전달된다.
하지만 Proxy 또는 NAT을 통한 요청의 경우, IP 주소가 동일하기 때문에, 특정 서버에 부하가 발생할 수 있다.
동적 로드 밸런싱
동적 로드 밸런싱을 위해 매번 서버의 상태를 검사하게 된다. 따라서 비용이 더 크다는 단점이 있지만, 반대로 정적 로드 밸런싱에서의 특정 서버에 대한 부하를 해결할 수 있다.
최소 연결
모든 서버가 동일한 수준의 처리 능력 이 있는 경우 사용되며, 서버와의 연결 시, 활성 연결이 적은 서버로 트래픽을 분배하는 방식이다.
최소 응답 시간
서버마다 처리 능력의 수준이 다른 경우 사용되며, 현재 가용한 리소스 등으로부터 응답 시간이 가장 빠른 서버로 요청을 분배하는 방식이다.