로드밸런싱 (Load Balancing) 이란
로드 밸런싱이란,
로드 + 밸런스 -ing 를 합친 말이다.
로드 : 서버가 받는 부하 (트래픽)
로드밸런싱 (Load Balancing) 은 이런 트래픽들을 잘 밸런싱하여 서버에게 골고루 분산시켜 주는 모듈이다.
로드밸런서 (Load Balancer) 는 클라이언트와 Server pool(서버 그룹) 사이에 위치해, 서버의 부하를 분산시키는 하드웨어 또는 소프트웨어를 말한다.
그렇다면 로드밸런서가 왜 필요할까?
예를 들어서비스를 런칭했다고 치자. 유저에게 오는 쿼리 개수가 1000개 이상 늘어난다고 하면 어떻게든 서버가 잘 유지가 될 수도 있겠지만
앱이 커지고 수천만명, 수억 명의 유저가 몰린다면 한 대의 애플리케이션 서버로 감당 가능하기 힘들다.
이처럼, 트래픽이 늘어났을 때 2가지 해결 방안이 있다.
1. Vertical Scale-up
- 서버 자체의 퍼포먼스를 높이기 (서버 크기를 늘리기, 많은 코어를 가진 cpu로 바꾸기 등)
하지만 이 방법은 기술적인 한계에 부딪힐 수 밖에 없다.
2. Horizontal Scale-out
- 분산시스템 구축하기 (한대로 처리할 것을 두대, 세대 그 이상으로 처리하기)
여기서 필요한게 로드밸런싱이다.
로드밸런싱 알고리즘 방식
1. Round robin
여러 대의 서버가 있으면, 들어오는 요청을 서버에게 라운드를 돌며 순차적으로 하나씩 보낸다.
모든 서버가 골고루 분산해 가져갈 수 있는 심플한 알고리즘으로 가장 많이 사용되는 로드밸런싱 기법이다.
모든 서버의 스펙이 동일하거나 비슷한 경우에 사용된다.
2. Random select
여러대의 서버가 있으면, 랜덤으로 골라 그 서버에 요청을 보낸다.
한 서버에 랜덤 하게 걸려서 해당 서버에 부하가 많이 걸리는 경우가 있을 수도 있다 (흔치 않음)
3. Least connection 최소 연결
서버에서 얼마나 많은 커넥션을 맺고 있는지 역으로 알려준다.
로드밸런서는 이 정보를 가지고 어디로 요청을 보낼지 판단한다.
4. Weighted Round Robin 가중 라운드 로빈
각 서버에 처리량(가중치)를 지정한 후, 가중치가 높은 서버에 클라이언트 요청을 우선적으로 전달하는 방식이다. 주로 서버의 트래픽 처리 용량이 다를 경우, 즉 특정 서버의 스펙(사양)이 더 좋을 경우 사용된다. 예를 들어, A 서버(가중치 3)와 B 서버(가중치 1)가 있고 로드 밸런서가 클라로부터 총 8개의 요청을 받았다면, A와 B 서버에 각 6개와 2개의 요청이 전달된다.
5. Least Response Time 최소 응답 시간
서버의 현재 연결 상태와 응답 시간을 모두 고려하여 가장 적은 연결 수와 가장 짧은 응답 시간을 가지는 서버에 우선적으로 요청을 보내는 방식이다.
6. IP Hash IP 해시
클라이언트의 IP 주소가 어떤 서버로 클라의 요청이 전달될지를 결정하는 방식이다. 클라의 IP 주소가 바뀌지 않으면 동일한 서버로 요청이 보내지는 것을 보장한다. RR 방식과 달리, 서버에 Session clustering이 구성되어 있지 않은 경우에 주로 사용한다.
로드밸런싱 구현 방법
1. 소프트웨어적 방식
- HAProxy, ReverseProxy (NginX, Apache..) 같은 웹서버를 이용해서
거기에 구현된 기능으로 로드밸런싱을 할 수 있다.
- 장점: 소프트웨어기 때문에 로직만 구현할 수 있어 저렴하다.
scale-up 하게 됐을 때 환경설정만 바꾸면 된다.
2. 하드웨어적 방식
- * L4/ L7 Switch. 데이터센터에서 직접 물리적인 방법으로 서버들을 묶는 것이다.
- 장점 : 안정성 높다.
IDC(데이터센터)에 묶기 때문에 보안에 좋다.
- 단점 : 비싸다.
L4 로드밸런서 와 L7 로드밸런서
L2, L3, L4, L7이 있고 로드밸런싱에는 L4, L7이 가장 많이 사용된다.
L4 로드 밸런서부터 포트번호를 바탕으로 로드(부하)를 분산하는 것이 가능하기 때문아더.
L4 로드 밸런서는 4 Layer 이하의 모든 계층의 정보를 가지기 때문에 IP 주소와 포트 번호 등을 로드 밸런싱에 활용한다. 한 대의 서버에 각기 다른 포트 번호를 부여하여 다수의 서버 프로그램을 운영하는 경우라면 최소 L4 로드 밸런서 이상을 사용해야만 한다
L7 로드 밸런서는 HTTP 헤더, 쿠키 등과 같은 사용자의 요청을 기준으로 특정 서버에 트래픽을 분산하는 것이 가능하다. 패킷의 내용을 확인해서 그 내용에 따라 트래픽을 특정 서버에 전송하는 것이 가능한 것이다. URL에 따라 부하를 분산시키거나, HTTP 헤더의 쿠키값에 따라 부하를 분산하는 등 클라이언트의 요청을 보다 세분화해 서버에 전달할 수 있다. 또, L7 로드밸런서는 서버의 응답까지도 알고 분석할 수 있다. 서버들로부터 필요한 정보를 응답받아 클라의 요청을 전달하기 전에 서버의 상태를 파악한 후 로드밸런싱을 진행할 수 있다.
단일장애점 : SPOF (Single Point Of Failure)
SPOF는 시스템 구성 요소 중에서, 동작하지 않으면 전체 시스템이 중단되는 요소를 말한다.
분산 시스템을 아무라 잘 구축해놓는다고 해도 로드밸런서가 죽으면 모든 서버가 다운이 된다.
그렇기 때문에 로드밸런서 자체도 scale-out 할 필요가 있다.
해결 방법으로는 로드밸런서 하나만 쓰는게 아니라 마스터-슬레이브 방식을 사용하여
마스터가 죽으면 슬레이브가 서비스를 이어갈 수 있도록 할 수 있다.
참고
로드 밸런싱이란? | 천상계 개발자가 되려면 이 정도는 알아야지
[Network] 로드 밸런서(LB) - 정의, 역할, 로드밸런싱 알고리즘, 종류
'CS공부' 카테고리의 다른 글
XSS와 CSRF의 차이 (웹 사이트 보안 공격) (0) | 2023.09.01 |
---|---|
CORS (Cross-Origin Resource Sharing) 란? (0) | 2023.08.30 |
서블릿(Servlet)이란? (0) | 2023.08.21 |
WS(Web Server)와 WAS(Web Application Server) 차이 (0) | 2023.08.18 |
JWT(JSON Web Token) 이란? (0) | 2023.07.24 |