✅ 로드밸런서 개요
우리가 구현하고자 하는 로드밸런서는 아래와 같다
📌 L3/L4 Load Balancer
L3 / L4 로드 밸런서는 네트워크 계층과 전송 계층에서 동작하며,
각각의 계층에서 다루는 기능과 로드 밸런싱 방식이 조금씩 다르다.
📍L3 로드 밸런서 - 네트워크 계층 기반
L3(Layer 3) 네트워크 계층(IP)에서 동작하며, 주로 IP 주소를 기준으로 패킷을 라우팅한다.
📎특징
- 라우터나 스위치와 유사하게 동작하며 IP 패킷을 처리한다.
- 프로토콜에 구애받지 않음: TCP/UDP와 상관없이 IP 패킷을 기반으로 트래픽을 분배한다.
- 네트워크 레벨의 부하 분산을 담당하며, 단순 라우팅과 트래픽 분배가 주된 역할이다.
📎장점
- 속도가 매우 빠르며, 대용량의 트래픽 처리에 적합하다.
- 프로토콜에 상관없이 모든 IP 기반 트래픽에 사용 가능하다.
📎단점
- 세션 정보나 클라이언트 상태를 추적하지 않으므로 상태 기반 라우팅이 불가능하다.
📍L4 로드 밸런서 - 전송 계층 기반
L4(Layer 4)는 전송 계층(TCP/UDP)에서 동작하며, IP 주소와 포트 번호를 조합하여 트래픽을 분산한다.
이 단계에서 클라이언트 요청을 TCP/UDP 프로토콜을 기준으로 적절한 서버에 할당한다.
📎 특징:
- TCP/IP 또는 UDP 프로토콜의 포트 번호를 활용하여 어떤 서비스에 대한 요청인지 식별한다.
- 포트 80/443: HTTP/HTTPS 트래픽 (API 서버)
- 포트 21: FTP 트래픽
- 포트 3306: MySQL 트래픽
- 세션 단위로 트래픽을 관리할 수 있어, 동일 클라이언트의 모든 요청을 동일 서버로 전달하는 세션 지속성을 지원한다.
📎 장점:
- L3보다 더 정교하게 트래픽을 분배할 수 있다.
- TCP/UDP 세션 단위로 요청을 처리하여 연결 관리에 유리하다.
- 포트 기반 트래픽 분산이 가능하므로 다양한 서비스를 동일한 로드 밸런서에서 관리할 수 있다.
📎 단점:
- 응용 계층(L7) 정보는 분석하지 않기 때문에 HTTP 헤더나 쿠키 기반의 분배는 할 수 없다.
📍L3/L4 로드 밸런서 vs L7 로드 밸런서
L3/L4 로드 밸런서는 단순한 성능 최적화와 안정성 확보가 주요 목표이며,
속도와 확장성이 중요한 시스템에서 자주 사용된다.
✅ 로드밸런서 트래픽 처리 과정
🔎중요한 점은
로드밸런서가 프록시 서버 역할을 수행한다는 점이다.
따라서 우리는 프록시 서버의 특징에 맞게 로드밸런서를 구현해내야한다.
📍1. 클라이언트 요청 수신
- 클라이언트가 로드밸런서에 HTTP, TCP, 또는 UDP 요청을 보낸다.
- 로드밸런서는 특정 포트로 수신된 요청을 처리한다:
- 예:
- HTTP 요청 (TCP, 80번 포트)
- 데이터베이스 요청 (TCP, 3306번 포트)
- DNS 요청 (UDP, 53번 포트)
- 예:
🔽
📍2. 프로토콜 구분 및 트래픽 분배
로드밸런서는 L4 계층에서 IP 헤더와 전송 계층 헤더를 분석하여 프로토콜과 포트 번호를 기준으로 트래픽을 구분한다.
TCP/UDP의 포트 목록 - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. 잘 알려진 포트(well-known port)는 특정한 쓰임새를 위해서 IANA에서 할당한 TCP 및 UDP 포트 번호의 일부이다. 일반적으로 포트 번호는 다음과 같이 세 가지로 나눌
ko.wikipedia.org
- TCP 패킷 → API 서버, 데이터베이스 서버 등으로 전달
- UDP 패킷 → DNS 서버, 게임 서버 등으로 전달
구분 방법
- IP 헤더의 Protocol 필드:
- 6 → TCP
- 17 → UDP
- 전송 계층 포트 번호:
- 포트 80 → HTTP 서버 (API 서버)
- 포트 53 → DNS 서버
🔽
📍3. 프록시 서버를 통한 요청 전달
로드밸런서가 프록시 서버 역할을 수행하며, 클라이언트의 요청을 대신 처리한다.
- 클라이언트는 로드밸런서와만 통신하며, 백엔드 서버와의 직접적인 연결이 없다.
- 프록시 서버 역할:
- TCP 연결 생성 및 중계:
- 클라이언트와 백엔드 서버 사이의 TCP 연결을 생성한다.
- UDP 패킷 중계:
- 클라이언트의 UDP 요청을 백엔드 서버로 전달하고, 응답을 클라이언트에 반환한다.
- TCP 연결 생성 및 중계:
프록시 서버가 있음으로써 백엔드 서버의 IP 주소를 숨길 수 있고, 보안 및 로드 관리에 유리하다.
🔽
📍4. 백엔드 서버와의 통신
로드밸런서(프록시)는 백엔드 서버에 요청을 전달한다.
이때, 각 서버에 요청을 적절히 분배하기 위해 로드밸런싱 알고리즘을 사용하는데,
- Round Robin: 순차적으로 각 서버에 트래픽을 분배
해당 알고리즘을 통해 구현하고자 한다.
🔽
📍5. 응답 반환
- 백엔드 서버가 응답을 로드밸런서로 반환한다.
- 로드밸런서는 응답을 클라이언트에게 전달합니다.
- 이 과정에서 TCP 세션을 유지하고, UDP 패킷은 비연결형으로 처리.
- 클라이언트는 백엔드 서버와 직접 통신한 것처럼 응답을 받는다.
'Distributed System' 카테고리의 다른 글
[MSA] MSA 환경에서 장애 전파를 막기 위한 전략 (Tracing, Circuit Breaker, Rate Limit) (2) | 2025.02.26 |
---|---|
[JAVA로 로드밸런서 구현하기] Registration (3) (0) | 2024.10.14 |
[JAVA로 로드밸런서 구현하기] 로드밸런서의 개념 (1) (0) | 2024.10.12 |