(TIL) 2025-02-14
(TIL) 2025-02-14
로드 밸런싱 자료조사
로드밸런싱 - 알고리즘
- 라운드 로빈 방식 (Round Robin Method)
- 서버로 들어온 요청을 순서대로 돌아가며 배정하는 방식.
- 클라이언트의 요청을 순서대로 분배하기 때문에 서버들이 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합.
- 가중 라운드로빈 방식 (Weighted Round Robin Method)
- 각각의 서버마다 가중치(Weight)를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분.
- 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 로드밸런싱 방식.
- IP 해시 방식 (IP Hash Method)
- 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식.
- 사용자의 IP를 *해싱(Hashing)하여 부하를 분산하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장.
- 경로가 보장되며, 접속자 수가 많을수록 분산 및 효율이 뛰어남.
해싱(Hasing) : 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그러한 함수.
- 최소 연결 방식 (Least Connection Method)
- Request가 들어온 시점에 가장 적은 연결(세션) 상태를 보이는 서버에 우선적으로 트래픽을 할당.
- 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합.
- 최소 응답시간 방식 (Least Response Time Method)
- 서버의 현재 연결 상태와 응답시간(Response Time)을 모두 고려하여, 가장 짧은 응답 시간을 보내는 서버로 트래픽을 할당하는 방식.
- 각 서버들의 가용한 리소스와 성능, 처리중인 데이터 양 등이 상이할 경우 적합.
- 대역폭 방식 (Bandwidth Method)
- 서버들과의 대역폭을 고려하여 서버에 트래픽을 할당
로드밸런싱 유형
- 소프트웨어
HAProxy
Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
http {
upstream game_backend {
# 여러 서버 인스턴스에 분배
server 127.0.0.1:8080; # 서버 1
server 127.0.0.1:8081; # 서버 2 (다른 프로세스가 바인딩된 포트)
server 127.0.0.1:8082; # 서버 3 (다른 프로세스가 바인딩된 포트)
}
server {
listen 80;
location / {
proxy_pass http://game_backend; # 로드 밸런싱된 서버들로 요청을 전달
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}
- 하드웨어 L4 로드 밸런서와 L7 로드 밸런서는 OSI 모델(Open Systems Interconnection Model)에서 정의된 4계층(전송 계층)과 7계층(애플리케이션 계층)에 따라 트래픽을 분배하는 로드 밸런서이다. 이들은 각각 트래픽을 분배하는 방식이 다르고, 이를 통해 다양한 용도에 맞는 서비스를 제공한다.
L4 로드 밸런서 L4 로드 밸런서는 TCP 또는 UDP와 같은 전송 계층 프로토콜을 기반으로 작동한다. 트래픽의 라우팅 결정은 IP 주소와 포트 번호에 따라 이루어집니다.
- 특징 패킷 레벨 처리: L4 로드 밸런서는 패킷의 헤더를 분석하여 로드 밸런싱을 수행한다. 애플리케이션의 세부 사항을 알지 못하며, 오직 전송 계층 정보를 기반으로 트래픽을 분배한다. 속도: 트래픽을 빠르게 처리할 수 있어 고속의 네트워크 환경에서 유리한다. 세션 유지: 트래픽 분배 시 세션 유지(세션 핸들링)가 가능하며, 일정한 세션이 같은 서버로 향하게 할 수 있다.
L7 로드 밸런서
L7 로드 밸런서는 애플리케이션 계층에서 작동하며, HTTP, HTTPS와 같은 애플리케이션 프로토콜을 기반으로 트래픽을 처리한다. 이 로드 밸런서는 HTTP 헤더, 쿠키, URL 경로 등 애플리케이션 레벨에서 트래픽을 분석하여 분배한다.
1
2
3
4
- 특징
**애플리케이션 레벨 처리**: L7 로드 밸런서는 트래픽의 컨텐츠(예: URL 경로, HTTP 헤더, 쿠키 등)를 분석하여 로드 밸런싱을 수행한다.
**고급 라우팅**: 요청의 내용에 따라 세밀하게 트래픽을 분배할 수 있으며, 특정 조건에 맞는 요청을 특정 서버로 보내는 등의 고급 기능을 제공한다.
**SSL 종료**: HTTPS 트래픽을 SSL 종료 처리할 수 있어 서버로 전송되는 암호화된 트래픽을 해제하고, 내부적으로는 평문 HTTP로 전송할 수 있다.
### 차이점
| 특징 | L4 로드 밸런서 | L7 로드 밸런서 |
|---|---|---|
| 작동 계층 | 전송 계층(TCP/UDP) | 애플리케이션 계층(HTTP/HTTPS 등) |
| 처리 방식 | IP 주소, 포트 번호 기반 트래픽 처리 | HTTP 헤더, URL, 쿠키, 요청 본문 기반 처리 |
| 속도 | 빠르고 단순한 트래픽 분배 | 애플리케이션 레벨에서 더 복잡한 처리 필요 |
| 기능 | 로드 밸런싱, 세션 유지 | 고급 라우팅, SSL 종료, 콘텐츠 기반 분배 |
| 사용 예시 | 방화벽, DNS 서버, 고속 네트워크 환경 | 웹 애플리케이션, 쿠키 기반 라우팅, HTTPS 처리 |
L4 로드 밸런서는 주로 IP 주소와 포트 번호를 기반으로 트래픽을 분배하는 빠르고 효율적인 방법으로, 높은 성능을 요구하는 환경에서 유리하다. L7 로드 밸런서는 애플리케이션 계층에서 더 정교한 트래픽 분석 및 라우팅을 가능하게 하여, 웹 애플리케이션과 같은 고급 트래픽 관리가 필요한 경우에 적합하다.
- AWS ELB(Elastic Load Balancer) AWS ELB(Elastic Load Balancer)와 같은 클라우드 서비스에서는 로드 밸런서를 설정하고, 여러 EC2 인스턴스(서버)에 트래픽을 분배할 수 있다. EC2 인스턴스를 여러 대 배포하고, 각 인스턴스에 Node.js 서버를 실행 후 ELB 설정에서 해당 EC2 인스턴스를 로드 밸런서에 등록하고, 트래픽을 분배한다.
- 옵션 Application Load Balancer (ALB): HTTP/HTTPS 요청을 처리할 때 사용한다. HTTP 헤더나 URI 기반 라우팅이 필요할 때 유용하다. Network Load Balancer (NLB): 고성능, 높은 처리량의 네트워크 요청을 처리할 때 사용한다. TCP 요청을 다루는 데 적합하다. Classic Load Balncer (CLB) : 초기에 제공되던 서비스. 하나의 주소에 하나의 대상 그룹으로 밖에 못보낸다.
This post is licensed under CC BY 4.0 by the author.
