"마트의 계산대나 은행 창구에서 한 사람이 모든 고객을 상대하려면 어려움이 많을 것이다.
계산대나 창구를 여러 개로 분산해 처리하는 편이 고객도 빨리 업무를 처리할 수 있고 한 사람에게 과도한 업무가 집중되는 것도 막을 수 있다.
마찬가지로 서버도 여러 대의 서버가 부하를 분담해 과도한 부하가 걸린 서버가 망가지거나 처리가 늦어지는 것을 방지한다. "
둘 이상의 CPU or 저장장치와 같은 컴퓨터 자원들에게 작업을 나누는 것
로드 밸런싱(Load Balancing)은 네트워크 트래픽을 여러 서버나 경로로 분산하여 특정 자원에 과부화가 걸리지 않도록 하는 기술이다.
시스템의 가용성, 성능, 확장성을 보장하는데 중요한 역할을 한다.
로드밸런싱은 주로 웹 서버, db서버, 애플리케이션 서버 등 다양한 시스템에서 사용된다.
로드밸런싱의 구성 요소
1. 로드밸런서(Load Balancer):
- 로드 밸런서는 트래픽을 분산하는 장치 또는 sw이다.
- 클라이언트의 요청을 여러 서버로 분산시켜 특정 서버에 과부화가 걸리지 않도록 하는 역할을 주로 수행한다.
- 다양한 기능을 제공하는데, 일반적으로 트래픽 관리, 세션 지속성 유지, 헬스 체크, SSL 종료 등을 포함한다.
2. 백엔드 서버(Backend Servers)
- 로드밸런서가 트래픽을 분산시키는 대상 서버다.
- 각 서버는 동일한 애플리케이션이나 서비스를 실행하여 클라이언트 요청을 처리한다.
- 서버 풀(Server Pool)또는 서버 팜(Server Farm)이라고 불린다.
3. 헬스 체크(Health Check)
- 백엔드 서버의 상태를 주기적으로 확인하는 메커니즘이다.
- 헬스 체크를 통해 서버가 정상적으로 동작하지 않는 경우 해당 서버로의 트래픽을 차단한다.
- 헬스 체크 방식에는 HTTP 상태 코드, TCP 연결 확인, 응용 프로그램 수준의 검사가 포함된다.
로드밸런싱 알고리즘
로드밸런서는 트래픽을 분산할 때 여러 알고리즘을 사용하여 최적의 성능을 보장한다.
1. 라운드 로빈(Round Robin)
- 트래픽을 순차적으로 각 서버에 분산
- 간단하고 공평한 방식이지만, 서버의 처리 능력을 고려하지 않는다.
"로드밸런싱 대상 서버의 스펙이 동일하고, 처리 시간 혹은 세션지속시간이 짧은 애플리케이션의 경우 이러한 방식이 적합합니다."
2. 가중치 라운드 로빈(Weighted Round Robin)
- 각 서버에 가중치를 부여하여 트래픽을 분산
- 서버의 처리 능력에 따라 가중치를 조절하여 효율적인 분산을 한다.
3. 최소 연결(Least Connection)
- 현재 연결 수가 가장 적은 서버로 트래픽을 분산
- 각 서버의 부하를 실시간으로 고려하여 트래픽을 분산한다.
"서버에 분배된 세션들이 일정하지 않은 경우에 적합하며 부하를 줄이는 측면에서 많이 사용됩니다."
왜 서버에 분배된 세션들이 일정하지 않은 경우에 적합한가?
- 비대칭 작업 부하: 각 서버가 처리하는 작업의 크기와 시간은 동일하지 않을 수 있다. 일부 서버는 긴 시간 동안 유지되는 세션이나 더 많은 리소스를 필요로 하는 작업을 처리할 수 있다. 이 경우, 고정된 라운드 로빈 방식은 부적절할 수 있다.
- 실시간 부하 반영: 최소 연결 방식은 각 서버의 현재 부하 상태를 실시간으로 반영하므로, 처리해야 할 작업이 많거나 시간이 오래 걸리는 세션이 있는 서버는 새로운 연결을 덜받게 되어 과부하를 방지할 수 있다. 반대로, 부하가 적은 서버는 더 많은 연결을 받아 부하를 균형 있게 분산시킨다.
- 동적 환경 적응: 웹 서비스나 애플리케이션 환경에서 각 요청의 리소스 요구 사항이 다를 수 있다.
예를 들어, 간단한 페이지 요청과 데이터베이스 쿼리가 복잡한 요청이 동일한 빈도로 발생할 수 있다. 최소 연결 방식은 이러한 동적 환경에서 각 서버가 최적의 상태로 동작하도록 도움을 준다.
예시
- 서버 A: 현재 10개의 연결을 처리 중이며, 대부분이 데이터베이스 쿼리와 같은 무거운 작업.
- 서버 B: 현재 5개의 연결을 처리 중이며, 대부분이 간단한 페이지 요청.
- 서버 C: 현재 8개의 연결을 처리 중이며, 평균적인 작업 부하.
새로운 클라이언트 요청이 발생할 때, 최소 연결 방식은 현재 연결 수가 가장 적은 서버 B로 트래픽을 분산시킨다. 이는 서버 A와 C의 부하를 줄여주고, 서버 간의 부하를 더 균형 있게 유지한다.
요약
- 비대칭 작업 부하: 각 서버가 처리하는 작업의 크기와 시간이 다르기 때문에, 일정하지 않은 세션 분배에 효과적.
- 실시간 부하 반영: 각 서버의 실시간 부하 상태를 반영하여, 과부하 방지 및 부하 균형 유지.
- 동적 환경 적응: 다양한 요청의 리소스 요구 사항을 동적으로 처리하여 최적의 성능 유지.
이러한 이유들로 인해 최소 연결 로드 밸런싱 방식은 서버에 분배된 세션들이 일정하지 않은 경우에 적합하며,
부하를 줄이는 데 효과적이다.
4. 최소 응답 시간(Least Response Time)
- 응답 시간이 가장 빠른 서버로 트래픽을 분산
- 서버의 성능과 네트워크 상태를 고려하여 트래픽을 분산한다.
5. IP 해싱(IP Hash)
- 클라이언트의 IP주소를 해싱하여 특정 서버로 트래픽을 분산
- 같은 IP의 클라이언트는 항상 같은 서버로 연결된다.
"특정 IP주소나 포트에서 접속량이 특히 많을 때 관리가 편한 방식입니다."
로드밸런싱의 장점
1. 고가용성(High Availability)
- 로드밸런싱은 서버 장애시에도 서비스가 중단되지 않도록 보장한다.
- 헬스 체크를 통해 비정상 서버를 자동으로 제외하고 정상 서버로 트래픽을 분산한다.
2. 확장성(Scalability)
- 트래픽 증가 시 서버를 추가하여 쉽게 확장할 수 있다.
- 로드밸런서는 자동으로 추가된 서버로 트래픽을 분산한다.
3. 성능 향상(Performance Improvement)
- 트래픽을 분산하여 각 서버의 부하를 줄여준다.
- 로드밸런서는 자동으로 추가된 서버로 트래픽을 분산한다.
4. 보안(Security)
- 로드밸런서에서 SSL 종료를 처리하여 백엔드 서버의 부하를 줄이고, 보안을 강화할 수 있다.
- 트래픽 분석 및 필터링을 통해 악의적인 트래픽을 차단할 수 있다.
로드밸런싱의 유형
1. 하드웨어 로드밸런서
- 전용 하드웨어 장비로 구성된 로드밸런서다.
- 높은 성능과 안정성을 제공하지만, 비용이 높다.
- 대표적인 하드웨어 로드밸런서로는 F5 Networks의 Big-IP, Cisco의 ACE, Citrix의 NetScaler등이 있다.
2. 소프트웨어 로드밸런서
- 소프트웨어 기반으로 구성된 로드밸런서이다.
- 유연성과 비용 효율성이 높으며, 클라우드 환경에서 주로 사용된다.
- 대표적으로 Nginx, HAProxy, Apache HTTP Server의 mod_proxy_balancer 등이 있다.
3. DNS 로드밸런싱
- DNS 서버가 트래픽을 여러 IP로 분산한다.
- 전 세계적으로 분산된 서버에 트래픽을 분산할 수 있다.
- GeoDNS와 같은 기술을 사용하여 지리적 위치에 따라 트래픽을 분산할 수 있다.
4. 애플리케이션 레벨 로드밸런싱 (L7)
- 애플리케이션 계층에서 트래픽을 분산한다.
- HTTP, HTTPS, WebSocket 등의 프로토콜을 기반으로 트래픽을 분산한다.
- API Gateway와 같은 역할을 하여 복잡한 라우팅, 인증, 인가 등의 기능을 수행한다.
[API Gateway]
마이크로서비스 아키텍처에서 중요한 역할을 하는 서버로,
클라이언트 요청을 적절한 서비스로 라우팅하고 다양한 부가 기능을 제공하는 중간 계층이다.
API Gateway는 마이크로서비스 간의 복잡한 상호작용을 간소화하고 보안, 로깅, 모니터링 등의 기능을 중앙에서 관리할 수 있도록 도와준다.
주요 기능
- 요청 라우팅(Request Routing)
- 인증 및 인가(Authentication and Authorization)
- 로드밸런싱(Load Balancing)
- 데이터 변환(Data Transformation)
- API 조합(API Composition)
- 모니터링 및 로깅(Monitoring and Logging)
- 속도 제한 및 스로틀링(Rate Limiting and Throttling)
- 캐싱(Caching)
주요 API Gateway 솔루션
- Amazon API Gateway
- Kong
- Apigee
- Nginx
5. 전송 레벨 로드밸런싱 (L4)
- 전송 계층에서 트래픽을 분산한다.
- TCP, UDP 등의 프로토콜을 기반으로 작동한다.
- IP주소와 포트 번호를 기반으로 트래픽을 분산한다.
- 빠른 속도와 낮은 지연 시간을 제공하며, 상대적으로 구현이 간단하다.
- 대표적으로 HAProxy, Nginx (L4모드), LVS (Linux Virtual Server)등이 있다.
로드밸런싱 구현 방식
1. 클라이언트 측 로드밸런싱(Client-Side Load Balancing)
- 클라이언트가 직접 로드밸런싱을 수행한다.
- 클라이언트 애플리케이션이 여러 서버 중 하나를 선택하여 요청을 보낸다.
- 클라이언트는 서버 목록을 알고 있어야 하며, 서버 선택 알고리즘을 구현해야 한다.
2. 서버 측 로드밸런싱(Server-Side Load Balancing)
- 서버가 로드밸런싱을 수행한다.
- 클라이언트 요청이 로드밸런서로 전달되고, 로드밸런서가 적절한 서버로 요청을 분산한다.
- 중앙집중식으로 트래픽을 관리할 수 있으며, 클라이언트는 로드밸런서의 주소만 알면 된다.
'CS' 카테고리의 다른 글
CS_운영체제_메모리 (0) | 2024.06.13 |
---|---|
CS_운영체제_운영체제와 컴퓨터 (0) | 2024.06.13 |
CS_네트워크_대칭키 vs 비대칭키 (0) | 2024.06.07 |
CS_네트워크_TCP 흐름제어 & 혼잡제어 (1) | 2024.06.03 |
CS_네트워크_3-Way HandShake & 4-Way HandShake (1) | 2024.06.03 |