[네트워크] 로드밸런서와 CDN(Content Delievery Network)이란
로드밸런싱이란 과도한 트래픽이나 요청이 발생했을때를 대비해서 이러한 요청을 여러개의 서버로 분산시켜 서버가 받는 부하(트래픽)을 감소시켜주는 행위를 의미한다.
그렇기에 로드밸런서(Load Balancer)란 인터넷 트래픽이나 여러 요청을 여러개의 서버에 분산시켜 처리하게 해주는 시스템이다.
이러한 로드밸런서가 필요한 이유는 교통 체증을 생각하면 쉽게 이해할 수 있다. 도로위에 어떤 이유에서인지 차가 너무 많아 꽉 막히면 답답하듯히 서버또한 마찬가지이다. 서버를 가진 컴퓨터의 성능과 소프트웨어적인 스펙에 따라서 한번에 처리할 수 있는 트래픽은 결국 한정적이기에 이용자가 너무 한번에 몰린다거나 너무 많은 접속자, 요청이 발생하면 우리가 이용할려고 하는 서비스의 지연이나 중단이 발생할 수 있다 (Ex. 수강신청, 티켓팅). 또한, 로드밸런서는 서버의 건강 상태를 지속적으로 모니터링하여, 문제가 있는 서버로의 트래픽을 줄이거나 차단하는 역할도 한다.
종합적으로, 로드밸런서는 도로위에 현재 교통 상황을 파악하여 차(데이터)들이 질서있고 효율적으로 움직일 수 있도록 관리하는 도로위에 교통 경찰과 같은 역할을 하는 친구라고 이해할 수 있다.
그렇다면 이제 로드밸런서를 어떤 식으로 구현할 수 있는지 알아보자
1. 로드밸런싱 알고리즘
우선, 소프트웨어적으로 로드밸런서를 구현하는 방식은 당연하게도 특정 로직을 사용해서 구현하는 것이다.
예를 들어, 이러한 방식들이 있다.
- 라운드로빈 방식(Round Robin Method)
- 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
- 클라이언트의 요청을 순서대로 분배
- 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우 적합
- 라운드 로빈 방식의 한계
- 서버의 수 만큼 공인 IP 주소가 필요
- 부하 분산을 위해 서버의 대수를 늘리기 위해서는 그 만큼의 공인 IP 가 필요
- 균등하게 분산되지 않음
- 웹 브라우저도 DNS 질의 결과를 캐싱하기 때문에 균등하게 부하분산 되지 않는다.
- 예를 들어, DNS 서버가 첫 번째 요청에 대해 서버 A의 IP를 반환하고, 이 IP 주소가 여러 클라이언트나 중간 네트워크 장비에 의해 캐시된다면, 후속 요청들이 서버 A로 집중될 수 있다.
- DNS 레코드의 TTL(DNS레코드의 캐시 만료 시간)값을 짧게 설정함으로써 어느 정도 해소가 되지만, TTL 에 따라 캐시를 해제하는 것은 아니므로 반드시 주의가 필요하다
- 서버가 다운되도 확인 불가
- DNS 서버는 웹 서버의 부하나 접속 수 등의 상황에 따라 질의결과를 제어할 수 없다
- 이때문에 유저들은 다운된 서버로 연결이 되기도 한다
- DNS 라운드 로빈은 어디까지나 부하분산 을 위한 방법이지 다중화 방법은 아니므로 다른 S/W 와 조합해서 관리할 필요가 있다
- IP 해시 방식(IP Hash Method)
- 클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식
- 사용자의 IP를 해싱해 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장
- 최소 연결 방식(Least Connection Method)
- 요청이 들어온 시점에 가장 적은 연결상태를 보이는 서버에 우선적으로 트래픽을 배분
- 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합
- 최소 응답 시간 방식(Least Response Time Method)
- 서버의 현재 연결 상태와 응답 시간을 모두 고려하여 트래픽을 배분
- 가장 적은 연결 상태와 가장 짧은 응답 시간을 보이는 서버에 우선적으로 로드를 배분
2. 로드 밸런서의 대표 종류
- L4 로드 밸런서와 L7 로드 밸런서
- L4, L7은 각각 Layer 4(전송 계층) 프로토콜과 Layer 7(응용 계층) 프로토콜의 헤더를 부하 분산에 이용하기 때문에 붙은 접두사
- 모든 요청을 L4, L7 로드 밸런서가 받아 서버들에게 적절히 나누어 준다
- L4 로드 밸런서
- 네트워크 계층(IP, IPX)이나 전송 계층(TCP, UDP)의 정보(IP주소, 포트번호, MAC주소, 전송 프로토콜)를 바탕으로 로드를 분산
- L7 로드 밸런서
- 애플리케이션 계층(HTTP, FTP, SMTP)에서 로드를 분산
- HTTP 헤더, 쿠키와 같은 사용자의 요청 기준 특정 트래픽 분산이 가능
- 패킷의 내용을 확인하고 그 내용에 따라 로드를 특정 서버에 분배
- 특정한 패턴을 지닌 바이러스를 감지, 네트워크를 보호할 수 있다
- DoS/DDoS와 같은 비정상적인 트래픽을 필터링
CDN(Content Delievery Network)란?
CDN은 전세계에 분산된 서버 네트워크를 사용하여 사용자에게 웹 콘텐츠를 보다 빠르게 제공하는 시스템이다.
예를 들어, 국내 최고의 IT기업중 하나인 '네이버'는 전세계에 데이터센터를 구축하여 가지고 있다. 그렇기에 각국의 네이버 사용자들은 자신의 컴퓨터와 가장 (물리적으로)가까운 데이터센터에서 웹 콘텐츠를 받아올 수 있게 되어 각국의 사용자들이 보다 쾌적하게 네이버를 이용할 수 있게 되는 것과 같은 이치이다.
CDN과 로드밸런서의 차이
이렇게 보면 로드밸런싱과 CDN은 얼핏 비슷한 역할을 하는 것처럼 보인다.
이 둘 모두 웹사이트의 성능과 가용성을 향상시키기 위해 사용되는 기술이지만, 엄연히 서로 다른 기술이다.
종합하자면, CDN은 서로 다른 물리적인 위치에 있는 사용자에게 보다 콘텐츠를 빠르게 제공하는 데 집중하는 기술이고, 로드밸런서는 해당 콘텐츠를 제공하는 각각의 데이터센터에서 서버 부하를 효율적으로 관리하기 위한 기술이다.