로드 밸런싱(Load Balancing)
로드 밸런싱은 네트워크 또는 서버에 가해지는 부하(로드)를 분산해주는 기술을 의미한다.
로드 밸런싱을 제공하는 서비스 또는 장치(로드 밸런서)는 클라이언트와 네트워크 트래픽이 집중되는 서버들 또는 네트워크 허브 사이에 위치하게 되는데 이를 통해서 부하가 특정 한곳에 집중되지 않고 트래픽을 균형 있게 분산하여 서버나 네트워크 허브들의 성능을 높일 수 있다.
로드 밸런싱의 이점
- 1. 가용성
만약 서버가 단 한대로 이루어져있다면 해당 서버가 여러 가지 문제로 인해 다운될 시 사용자는 더 이상 서비스를 이용할 수 없게 된다.
하지만 로드 밸런싱을 통해 여러 서버로 부하를 분산하면 특정 서버에서 문제가 발생하여도 전체 서비스에 영향이 적고, 어떤 서버에 문제가 발생하고 있는지 파악할 수 있게 된다.
또한 서버의 유지 관리 또는 버전 업그레이드가 중단 없이 가능하게 되는데, 예를 들면 가장 최근에 진행했던 프로젝트에서 k8s 클러스터 구성을 해보며 Rolling Update 방식으로 무중단 배포를 진행하였다.
그때 서버를 2대 이상으로 설정하여 백엔드 서버의 버전을 업그레이드할 때 모든 서버를 종료하는 것이 아닌 하나의 서버만 종료시켜 놓고 버전을 업그레이드하여 실행시키고 남은 한 대의 서버도 마저 업그레이드시켜 서비스의 중단 없이 진행할 수 있었다.
- 2. 성능
아무래도 하나의 서버에 트래픽이 집중적으로 몰리는 것이 아닌 여러 서버에 균등하게 나눠지기 때문에 전체적인 애플케이션 성능을 향상시킬 수 있다.
- 3. 보안
로드 밸런싱을 통한 부하 분산은 서비스 거부 공격(DoS)의 영향을 최소화할 수 있다.
로드 밸런서의 기본 기능
- 1. 헬스체크
로드 밸런서는 보통 서버들에 대한 주기적인 헬스 체크를 통해 서버들의 장애 여부를 판단할 수 있다.
이를 통해서 특정 서버에서 문제가 발생하면 해당 서버로 가는 트래픽을 다른 정상 작동중인 서버로 보내주는 Fail-over가 가능하며 TCP/UDP 분석이 가능하기 때문에 방화벽의 역할도 수행할 수 있다.
- L4 헬스체크: TCP 3-way Handshaking을 통해서 각 포트의 상태를 체크하는 방식이다.
- L7 헬스체크: 응용 계층에서 헬스 체크를 진행하게 되는데 실제 웹 페이지에 통신을 시도하여 이상 유무를 파악한다.
- 2. 터널링
논리적인 통로를 만들어 통신할 수 있게 하는 개념으로 로드 밸런서는 클라이언트와 서버 중간에 터널링을 제공해 준다. 이를 통해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 역캡슐화를 진행하게 된다.
- 3. NAT(Network Address Translation)
NAT는 IP 주소를 변환해주는 기능으로 로드 밸런서로 들어오는 요청들을 각 서버의 IP 주소에 맞게 보내줄 수 있게 된다.
즉 내부 네트워크에서 사용하는 사설 IP 주소와 로드 밸런서 외부의 공인 IP 주소 간의 변환하는 역할을 한다.
- SNAT(Source Network Address Translation): 내부에서 외부로 트래픽이 나가는 경우로 내부 사설 IP 주소를 외부 공인 IP 주소로 변환
- DNAT(Destination Network Address Translation): 외부에서 내부로 트래픽이 들어오는 경우로 외부 공인 IP 주소에서 내부 사설 IP 주소로 변환
- 4. DSR(Direct Server Routing)
서버에서 클라이언트로 되돌아가는 경우 목적지를 클라이언트로 설정한 다음 네트워크 장비나 로드 밸런서를 거치지 않고 바로 클라이언트로 찾아가는 방식이다. 이럴 경우 로드밸런서의 부하를 줄여줄 수 있는 장점이 있다.
로드 밸런서의 종류
- L4 로드 밸런서
L4 계층에서 동작하는 로드밸런서로 네트워크 계층(IP)이나 전송 계층(TCP/UDP)의 정보를 바탕으로 부하를 분산하게 된다. 즉, IP 주소나 포트번호, MAC 주소, 전송 프로토콜 등에 따라서 트래픽을 나누고 분산처리하는 것이 가능하다.
L7 로드 밸런서와는 다르게 요청 메시지나 HTTP 헤더와 같은 내용을 확인할 수 없기 때문에 L7 로드 밸런서에 비해서 섬세한 라우팅이 불가능하다.
반대로 요청 메시지에 대해서 확인할 필요가 없기 때문에 훨씬 빠른 속도를 가질 수 있어 부하를 분산하는 효율이 높다.
L4 로드 밸런서는 주로 온라인 게임, 스트리밍 서비스 등 실시간 트래픽 처리가 중요한 서비스에 적합하다.
- L7 로드 밸런서
L7 로드밸런서는 L4 로드밸런서의 기능을 포함하는 것뿐만 아니라 응용 계층의 프로토콜(HTTP, SMTP, FTP 등)을 바탕으로도 분산 처리가 가능하다.
L4 로드밸런서와는 다르게 요청에 대해서 처리하게 되는데 HTTP 헤더와 같은 정보를 통해서 부하를 분산할 수 있게 된다.
이를 통해서 훨씬 더 섬세한 라우팅이 가능하게 되고 요청 내용에 따라 특정 서버로 전달하거나, 캐싱 및 압축 등의 다양한 기능을 구현할 수 있다.
또 다른 장점으로는 비정상적인 트래픽을 사전에 필터링할 수 있어 서비스 안정성이 높다.
반면에 패킷의 내용을 복호화해야 하므로 L4 로드 밸런서보다 처리 시간이 더 걸리게 된다.
또한, 클라이언트가 로드밸런서와 인증서를 공유해야 하기 때문에 공격자가 로드밸런서를 통해 클라이언트의 데이터에 접근할 수 있는 보안상의 위험이 존재한다.
L7 로드 밸런서는 주로 웹 서비스, API 게이트웨이, CDN 등 애플리케이션 레벨의 로드 밸런싱이 필요한 서비스에 적합하다.
- L7 로드 밸런서의 부하 분산 방법
- URL 스위칭 방식
특정 하위 URL 들은 특정 서버로 처리하는 방식이다.
전에 MSA 프로젝트를 진행할 당시 URL마다 특정 서버로 처리해야 됐었다. 예를 들면 /member/signup은 회원 정보를 처리하는 서버로 요청을 보내고 /member/profile 경로는 프로필 이미지를 처리할 수 있는 이미지 서버로 요청을 보냈었다.
- 컨텍스트 스위칭 방식
클라이언트가 요청한 특정 리소스에 대해 특정 서버 등으로 연결을 해줄 수 있다. 예를 들어 이미지 파일에 대해서는 확장자를 참조하여 별도로 구성된 이미지파일이 있는 서버나 스토리지로 직접 연결해 줄 수 있다.
- 쿠키 지속성
쿠키 정보를 바탕으로 클라이언트가 연결 했었던 동일한 서버에 계속 할당해 주는 방식이다. 특히 사설 네트워크에 있던 클라이언트의 IP 주소가 공인 IP 주소로 치환되어 전송하는 방식을 지원한다.
HTTP 헤더에 보면 X-Forwarded-For 부분이 있는데 해당 헤더가 로드 밸런서를 통해 웹 서버에 접속하는 클라이언트의 원래 IP 주소를 식별하는 표준 헤더라고 한다.
로드밸런싱 기법
로드 밸런싱은 로드 밸런서가 서로 다른 클라이언트 각 요청에 가장 적합한 서버를 결장하기 위해 여러 가지 알고리즘을 제공하는데 크게 2가지로 구분할 수 있다.
정적 로드 밸런싱
- 라운드 로빈
순차적으로 돌아가며 세션을 할당해주는 방식으로 요청이 오면 단순히 그 요청을 순서대로 서버에 분배해 준다.
클라이언트로부터 받은 요청을 로드밸런싱 대상 서버에 순서대로 할당받는 방식으로 첫 번째 요청은 첫 번째 서버, 두 번째 요청은 두 번째 서버, .... 등으로 할당하게 된다.
클라이언트의 요청을 순서대로 분배하기 때문에 서버들이 동일한 스펙을 갖고 있고 서버와의 세션이 오래 지속되지 않는 경우에 활용하기 적합하다.
- 가중 라운드 로빈
각 서버마다 가중치(처리할 수 있는 용량)를 설정해 두고 해당 가중치만큼 세션을 할당해 주는 방식으로 특정 서버의 스펙이 좋다면 해당 서버에 가중치를 좀 더 주어 세션을 더 많이 할당해주고 스펙이 좋지 않은 서버에는 가중치를 적게 두어 세션을 적게 할당해주는 방식이다.
- IP 해시
로드 밸런서는 클라이언트의 IP 주소에 대해 해싱이라고 하는 수학적 계산을 수행하여 숫자로 변환한 다음 개별 서버로 매핑한다.
특정 사용자는 특정 서버로만 할당시키는 방식으로 특정 IP 주소나 포트를 갖는 사용자들은 특정 서버로만 세션을 맺도록 하는데 특정 IP 주소나 포트에서 접속량이 많을 때 관리가 편한 방식이다.
동적 로드 밸런싱
- 최소 연결
가장 적게 연결되어 있는 서버에 세션을 할당해주는 방식으로 서버에 분배된 세션들이 일정하지 않은 경우에 적합하며 부하를 줄이는 측면에서 많이 사용된다.
- 최소 응답
서버의 응답 시간을 고려하여 세션을 할당해주는 방식으로 가장 짧은 응답 시간을 보이는 서버에 우선적으로 세션을 할당해주는 방식
참고 자료
'CS > 네트워크' 카테고리의 다른 글
네트워크 - SOP와 CORS (1) | 2024.07.22 |
---|---|
네트워크 - REST API, RESTful (0) | 2024.07.17 |
네트워크 - DNS (0) | 2024.07.13 |
네트워크 - 대역폭 (0) | 2024.07.10 |
네트워크 - HTTP (2) | 2023.10.20 |