본문 바로가기

System Architecture/개념

System Architecture - 로드 밸런싱 (Load Balancing)

로드 밸런싱 (Load Balancing) 이란 서버에 가해지는 부하 (Load) 를 분산 (Balancing) 해주는 장치, 또는 기술을 의미한다. 클라이언트와 서버 풀 (Server Pool, 분산 네트워크를 구성하는 서버들의 그룹) 사이에 위치하며, 한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리하여 각각의 서버가 최적의 퍼포먼스로 트래픽을 처리할 수 있도록 하는 것이 로드 밸런싱이다.

 

계기

서비스의 초기 단계에서는 클라이언트 수가 적기 때문에 서버 한 대로도 모든 요청에 응답하는 것이 가능할 것이나, 사업 규모의 확장, 클라이언트의 증가가 이루어지면 기존의 서버로는 유지가 불가능하게 된다. 이 경우, 서버의 증설이 필요한데,

 

Scale-up과 Scale-out

 

첫 번째로 scale-up이 있다. scale-up은 서버의 자체의 성능을 확장하는 것을 의미한다. 예를 들어 초당 백만 건의 요청을 처리할 수 있던 웹 서버를 초당 천만 건을 처리할 수 있도록 성능을 올리는 것을 scale-up이라고 한다.

 

두 번째로는 scale-out이 있다. scale-out은 서버의 개수를 늘리는 것이다. 예를 들어 초당 백만 건의 요청을 처리할 수 있는 웹 서버를 여러 대로 늘려 더 많은 요청을 처리할 수 있도록 하는 것을 scale-out이라고 한다.

 

scale-up으로 인한 확장의 경우 드 밸런싱이 필요하지 않으나 scale-out을 결정하는 순간 로드 밸런싱이 필요해진다. 여러 대의 서버로 트래픽을 균등하게 분산시켜 더 많은 요청을 더 효율적으로 관리할 수 있도록 도와주는 것이 로드 밸런싱의 역할이기 때문이다.

 

로드 밸런싱 알고리즘

라운드로빈 방식 (Round Robin Method)

서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식. 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결 (세션) 이 오래 지속되지 않는 경우 활용하기 적합하다.

가중 라운드로빈 방식 (Weighted Round Robin Method)

각각의 서버마다 가중치를 놓은 후, 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분하는 방식. 서버마다 트래픽 처리 능력이 다른 경우 사용한다.

IP 해시 방식 (IP Hash Method)

클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식. 사용자의 IP를 해싱하여 로드를 분배하기 때문에, 사용자가 항상 동일한 서버로 연결되는 것을 보장한다. 이는 세션 클러스터링이 불가능한 경우, 세션의 일관성 (Session Persistence) 을 위해 IP를 기반으로 어느 인스턴스를 보내야 할지를 확정하여 주기적으로 동일한 서버로 연결이 되도록 한다. Sticky-session을 구현하기 위한 방법 중 하나라고 한다. 

최소 연결 방식 (Least Connection Method)

해당 요청이 들어온 시점에서 가장 적은 연결상태를 가진 서버에 우선적으로 트래픽이 배분되는 방식. 세션이 길어지는 경우가 잦거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식이다.

최소 응답 시간 (Least Response Time Method)

서버의 현재 연결 상태와 응답시간을 모두 고려하여 트래픽을 배분한다. 가장 적은 연결 상태 및 가장 짧은 응답시간을 보이는 서버에 우선적으로 로드를 배분한다.

 

로드 밸런싱의 종류

로드 밸런싱의 종류는 OSI 7 계층에 따라 나뉘게 된다. 각각의 계층, L1, L2, L3, ... L7 이 이에 해당하며, 상위 계층에서 사용되는 장비는 하위 계층의 장비가 갖고 있는 기능을 모두 갖고 있으며, 따라서 상위 계층으로 갈 수록 더욱 정교한 로드 밸런싱이 가능해진다.

 

가장 보편적으로 사용되는 로드밸런싱은 L4 로드 밸런싱L7 로드 밸런싱이다.

 

L4 로드 밸런싱
L7 로드 밸런싱

L4 로드 밸런서는 네트워크 계층 (IP, IPX) 이나 트랜스포트 계층 (TCP, UDP) 의 정보를 바탕으로 로드를 분산한다. IP 주소나 포트번호, MAC 주소, 전송 프로토콜에 따라 트래픽을 나누는 것이 가능하다. (그러나 MAC 주소를 바탕으로 한 로드 밸런싱은 L2, IP주소를 바탕으로 한 로드 밸런싱은 L3 에서도 가능하다.)

 

L7 로드밸런서의 경우, 애플리케이션 계층 (HTTP, FTP, SMTP) 에서 로드를 분산하기 때문에 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다. 즉, 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배하는 것이 가능한 것이다. 또한, L7 로드 밸런서의 경우 특정한 패턴을 지닌 바이러스를 감지해 네트워크를 보호할 수 있으며, DoS/DDoS와 같은 비정상적 트래픽을 필터링할 수 있어 네트워크 보안 분야에서도 활용된다.

 

각 계층에 대한 정보는 아래 글을 참고.

https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/

 

로드 밸런싱(Load balancing) 종류와 알고리즘 | DevelopersIO

로드 밸런싱이라고 하면「트래픽을 분산시켜주는 컴퓨터 네트워크의 기법」이라고만 생각했지만, 로드 밸런스를 구현해보고 사용해보면서 다양한 종류와 알고리즘이 있다는 것을 알았습니다.

dev.classmethod.jp

 

장애 대비 시나리오

로드 밸런서를 이중화 함으로써 장애를 대비할 수 있다. 다음 그림을 참고.

 

이중화된 로드 밸런서들이 서로 Health Check를 하며, 메인 로드 밸런서가 동작하지 않는 경우, 여분의 로드 밸런서로 요청이 가게 된다.

 

출처

https://okky.kr/article/1065322

https://m.post.naver.com/viewer/postView.naver?volumeNo=27046347&memberNo=2521903 

https://nesoy.github.io/articles/2018-06/Load-Balancer

https://dev.classmethod.jp/articles/load-balancing-types-and-algorithm/