즉, “하나의 서버로 모든 요청이 몰리는 문제를 방지하고, 여러 서버가 효율적으로 요청을 처리하도록 관리하는 장치”
고가용성 확보
성능 향상
유연한 스케일 아웃(수평 확장) 지원
Auto-scaling
필요할 때마다 시스템을 동적으로 확장하고 축소할 수 있는 기능
→ 자원을 더욱 경제적이고 탄력적으로 이용
대부분의 클라우드 서비스 업체의 경우 지원
하드웨어 로드밸런서: L4, L7 스위치 등 네트워크 장비 기반
소프트웨어 로드밸런서: 일반 호스트에서도 소프트웨어를 통해 구현 가능
장점: 유연성, 비용 효율, 클라우드 환경과 연동 용이
| 알고리즘 | 특징 |
|---|---|
| Round Robin | 요청을 순차적으로 서버에 배분 |
| Least Connections | 연결 수가 가장 적은 서버에 배분 |
| IP Hash | 클라이언트 IP 기반 → 동일 클라이언트 동일 서버 연결 |
| Weighted Round Robin | 서버별 가중치 적용 → 성능 좋은 서버에 더 많은 요청 배분 |
| Weighted Least Connections | 연결 수 + 서버 가중치 고려 |
포워드 프록시와 리버스 프록시
프록시 서버: 클라이언트와 서버 사이에서 중계 역할을 하는 서버
구분 역할 위치 목적 Forward Proxy 클라이언트 대신 요청 클라이언트 측 내부 사용자 보호, 접근 제어, 캐싱 Reverse Proxy 서버 대신 응답 처리 서버 측 로드밸런싱, 보안 강화, SSL 종료, 캐싱
http {
upstream backend {
server 10.10.10.2:80 weight=3;
server 10.10.10.3:80 weight=2;
server 10.10.10.4:80 weight=1;
}
server { # 웹 서버 관련 설정
listen 80; # 80번 포트를 LISTEN 대기 상태로
server_name localhost; # 서버 이름을 localhost로 삼겠다
location / { # 특정 경로 (/)에 대한 설정
proxy_pass http://backend;
proxy_set_header Host $host; # 원래 요청한 호스트 이름을 유지
proxy_set_header X-Real-IP $remote_addr; # 클라이언트의 실제 IP 주소를 내부 서버에 전달
}
}
}
weight: 서버별 트래픽 비율 지정 (기본값 1, 생략 가능)
Auto-scaling과 연계 시, upstream에 서버 추가/제거 후 reload 하면 트래픽 자동 분배
업스트림과 다운스트림
오리진 서버를 최상위에 위치한 서버라고 가정했을 때,
용어 의미 방향 업스트림(Upstream) 데이터나 요청을 클라이언트에서 상위 서버로 보내는 방향 클라이언트 → 서버 또는 서버 간 상위 계층 다운스트림(Downstream) 데이터나 요청을 상위 서버에서 클라이언트로 데이터를 보내는 방향 서버 → 클라이언트 또는 하위 계층
- 헷갈리면 업로드와 다운로드를 생각