목표
- Load Balancing의 개념에 대해 이해한다.
- Load Balancing Algorithm에 대해 이해한다.
Load Balancing
- 네트워크 트래픽을 여러 서버로 분산시켜 서버의 부하를 줄이고, 시스템의 성능과 가용성을 높이는 기술이다.
- Client-Side Load Balancing과 Server-Side Load Balancing이 있다.
1. Client-Side Load Balancing
- 요청을 보내는 클라이언트가 직접 어떤 서비스 인스턴스로 요청을 보낼지를 결정한다.
- 클라이언트는 Service Discovery (ex: Eureka)를 통해 동적으로 서비스 인스턴스 목록을 조회한다.
- ex) Spring Cloud LoadBalancer, Ribbon
- 장점
- 로드 밸런싱 로직이 클라이언트에 분산되어 있어, 단일 장애 지점을 제거할 수 있다.
- 클라이언트가 다양한 로드 밸런싱 전략을 쉽게 적용할 수 있다.
- 단점
- 각 클라이언트가 인스턴스 목록을 관리해야 하므로, 인스턴스 상태를 동기화하는 데 어려움이 있을 수 있다.
- 각 클라이언트가 로드 밸런싱 로직을 구현해야 하므로, 클라이언트 코드의 복잡성이 증가할 수 있다.
2. Server-Side Load Balancing
- 클라이언트가 직접 서비스 인스턴스를 선택하는 대신, 요청을 중간에 위치한 로드 밸런서 서버로 보낸다.
- ex) Nginx, AWS Elastic Load Balancer (ELB)
- 장점
- 클라이언트는 단순히 로드 밸런서의 주소만 알면 되므로, 클라이언트 쪽 로직이 단순해진다.
- 모든 로드 밸런싱 로직이 서버에 중앙 집중화되어 있어, 관리와 설정이 용이하다.
- 단점
- 로드 밸런서 서버가 중단되면 모든 트래픽이 차단되는 단일 장애 지점이 존재한다.
- 로드 밸런서 서버의 용량에 따라 처리할 수 있는 요청의 양이 제한될 수 있다.
Load Balancing Algorithm
- 로드 밸런서가 서로 다른 클라이언트 요청 각각에 가장 적합한 서버를 결정하기 위해 따르는 규칙 세트이다.
- Static 방식과 Dynamic 방식의 Load Balancing Algorithm이 존재한다.
1. Round-Robbin (Static Load Balancing)
- 각 서버에 순차적으로 요청을 분배하는 방식이다.
- 라운드 로빈 방식에서는 권한 있는 이름 서버가 특수 하드웨어나 소프트웨어 대신 로드 밸런싱을 수행한다.
- DNS는 서버 팜에 있는 여러 서버의 IP 주소를 차례대로 또는 라운드 로빈 방식으로 반환한다.
2. Least Connections (Dynamic Load Balancing)
- 로드 밸런서는 활성 연결이 가장 적은 서버를 확인하고 해당 서버로 트래픽을 전송한다.
Load Balancing Architecture
- 아래의 [그림 1]은 AWS에서 제공하는 Load Balancing 작동 방법을 나타낸다.
[그림 1]
%20(1).6d83ec6cc7c21daba3a9a1e56a88b6d13e8d2cff.png)
자료 출처 1 - https://www.ibm.com/kr-ko/topics/load-balancing
자료 출처 2 - https://aws.amazon.com/ko/what-is/load-balancing/
공식 문서 찾아서 잘 정리해주셨군요 👍🏻