728x90

 

클라이언트가 한 두 명일때, 서버는 여유롭게 사용자가 원하는 결과를 응답해줄 수 있다. 

 

하지만 대규모의 서비스는 클라이언트가 수천만명 혹은 그 이상이다. 

 

아무리 성능이 뛰어난 서버라고 해도 모든 트래픽을 감당할 수 없다. 

 

그래서 기업들은 서버를 추가로 구비하고, 여러 대의 서버에 동일한 데이터를 저장하여

수많은 트래픽을 효과적으로 분산하게 된다. 

 

그런데, 단순히 다수의 서버를 구축해 운영한다고 해서 모든 클라이언트의 요청에 일관성 있게 응답할 수 있을까?

 

쏟아지는 트래픽을 여러 대의 서버로 분산해주는 기술이 없다면, 한 곳의 서버에 모든 트래픽이 몰리는 상황이 발생할 것이다.

 

이 때 필요한 기술이 바로 로드밸런싱이다! 

 

로드밸런서

Load Balancer Architecture

로드밸런서서버에 가해지는 부하(=Load)를 분산(=balancing)해주는 장치 또는 기술을 말한다.

 

클라이언트와 서버풀(Server Pool, 분산 네트워크를 구성하는 서버들의 그룹) 사이에 위치하며,

 

한 대의 서버로 부하가 집중되지 않도록 트래픽을 관리해 각각의 서버가 최적의 퍼포먼스를 낼 수 있게 한다. 

 

위에서 언급한 엄청난 트래픽에 대처할 수 있는 방법은 크게 두 가지이다. 

 

바로, scale-up과 scale-out!

 

Scale-up

Scale-up은 서버 자체의 성능을 확장하는 것을 의미한다. 

 

비유하자면 CPU가 i3인 컴퓨터를 i9으로 업그레이드하는 것과 같다. 

 

Scale-out

Scale-out은 기존 서버와 동일하거나, 낮은 성능의 서버를 두 대 이상 증설하여 운영하는 것을 의미한다. 

 

이는 CPU가 i3인 컴퓨터를 여러 대 추가 구입해 운영하는 것에 비유할 수 있다. 

 

Scale-out의 방식으로 서버를 증설하기로 결정했다면, 

여러 대의 서버로 트래픽을 균등하게 분산해주는 로드밸런싱이 반드시 필요하다. 

 

 

로드밸런서의 종류

 

로드밸런서는 OSI 7계층을 기준으로 어떻게 부하를 분산하는지에 따라 종류가 나뉜다. 

 

2계층을 기준으로 부하를 분산한다면 L2, 3계층을 기준으로 부하를 분산한다면 L3. 

 

상위 계층으로 갈수록 섬세한 부하 분산이 가능하지만 가격이 비싸진다. 

 

반대로, 하위 계층으로 갈수록 간단한 부하 분산이 가능하고 가격이 저렴해진다. 

 

L2 Data Link 계층을 사용, Mac 주소 기반 부하 분산  
L3 Network 계층을 사용, IP 주소 기반 부하 분산  
L4 Transport 계층을 사용, Port 기반 부하 분산 TCP, UDP
L7 Application 계층을 사용, 요청(URL) 기반 부하 분산 HTTP, HTTPS 등

 

 

 

로드밸런서의 기본 기능 

Health Check

기본적으로 보통의 로드 밸런서는 서버들(또는 다음의 노드)에 대한 주기적인 Health Check를 통해 서버들의 장애 여부를 판단할 수 있다. 

 

이로 인해 로드 밸런서가 있을 때, 서버 몇 대에 이상이 생기더라도 다른 정상 동작 중인 서버로 트래픽을 보내주는 Fail-over가 가능하다. 

 

또, TCP/UDP 분석이 가능하기 때문에 Firewall의 역할도 수행할 수 있다. 

 

  • L3 체크 - ICMP를 이용해 서버의 IP 주소가 통신 가능한 상태인지 확인한다.
  • L4 체크 - TCP는 3-Way-Handshaking(전송 >> 확인/전송 >> 확인)를 기반으로 통신한다. 이러한 TCP의 특성을 바탕으로 각 포트 상태를 체크하는 방식이다. 예를 들어, HTTP 웹 서버의 경우 80 포트를 사용하므로 TCP 80 포트에 대한 체크를 통해 서버가 살아있는 상태인지 확인한다. 
  • L7 체크 - 어플리케이션 계층에서 체크한다. 즉, 실제 웹페이지(like index.html)에 통신을 시도하여 이상 유무를 파악한다. 

 

Tunneling 

눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념이다. 

 

로드밸런서는 클라이언트와 서버 간 중간에서 터널링을 제공해준다. 

 

즉, 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제하게 한다. 

 

NAT(Network Address Translation)

IP 주소를 변환해주는 기능이다. (목적지와 수신지의 IP 주소와 TCP/UDP 포트를 재기록하여 변환하며 네트워크 트래픽을 주고받을 수 있다)

 

예를 들어, 내부 네트워크에서 사용하던 사설 IP 주소를 로드밸런서 외부의 공인 IP 주소로 변경해준다. (반대로도 가능하다)

 

이렇게 하면, 부족한 공인 IP 주소를 효율적으로 사용할 수 있지만, 로드밸런싱 관점에서는 여러 개의 호스트가 하나의 공인 IP 주소(VIP)를 통해 접속하는 것이 주 목적이다. 

 

  • SNAT(Source Network Address Translation) - 내부에서 외부로 트래픽이 나가는 경우, 내부 사설 IP 주솔르 외부의 공인 IP 주소로 변환하는 방식이다. 집에서 사용하는 공유기가 대표적인 예이다. 
  • DNAT(Destination Network Address Translation) - 외부에서 내부로 트래픽이 들어오는 경우, 외부 공인 IP 주소를 내부의 사설 IP 주소로 변환하는 방식이다. 로드밸런서가 대표적인 예이다. 

 

DSR(Direct Server Routing)

서버에서 클라이언트로 되돌아가는 경우, 목적지를 클라이언트로 설정한 다음, 

 

네트워크 장비나 로드밸런서를 거치지 않고 바로 클라이언트를 찾아가는 방식이다. 

 

이 경우, 로드밸런서의 부하를 줄여줄 수 있는 장점이 있다. 

 

 

로드밸런서가 동작하는 방법

 

로드밸런서는 대부분 아래와 같은 절차로 동작하게 된다. 

 

(1) 클라이언트의 브라우저에서 dolphinsarah.com이라고 입력

(2) 클라이언트에 설정된 메인 DNS 서버로 dolphinsarah.com의 IP 주소 문의 

(3) 메인 DNS 서버는 dolphinsarah.com 주소를 관리하는 별도의 DNS 서버에 IP 주소 문의

(4) 별도 관리 DNS 서버는 로드밸런서의 IP(Virtual IP)주소를 메인 DNS 서버에게 알려줌

(5) 메인 DNS 서버는 획득한 VIP 주소를 클라이언트에 전송

(6) 클라이언트에서 로드밸런서의 VIP 주소로 http 요청

(7) 로드밸런서는 별도 로드밸런싱 방법(like 라운드 로빈)을 통해 서버에 요청을 전송

(8) 서버의 작업 결과를 받은 로드밸런서는 전달 받은 http 결과를 클라이언트에 전송

 

 

로드밸런서가 서버를 선택하는 방법 - L4 계층

 

라운드로빈 방식(Round Robin Method)

서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식. 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합하다. 

 

가중 라운드로빈 방식(Weigthed Round Robin Method)

각각의 서버마다 가중치를 매기고, 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분한다. 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식이다. 예를 들어, A라는 서버가 5라는 가중치를 갖고, B라는 서버가 2라는 가중치를 갖는다면 로드밸런서는 라운드로빈 방식으로 A서버에 5개, B서버에 2개의 요청을 전달한다. 

 

IP 해시 방식(IP Hash Method)

클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식이다. 사용자의 IP를 해싱(Hashing, 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것 또는 그러한 함수)해 로드를 분배하기 때문에 사용자가 항상 동일한 서버로 연결되는 것을 보장한다. 

 

최소 연결 방식(Least Connection Method)

요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분한다. 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식이다. 

 

최소 리스폰타임(Least Response Time Method)

서버의 현재 연결 상태와 응답시간(Response Time, 서버에 요청을 보내고 최초 응답을 받을 때까지 소요되는 시간)을 모두 고려하여 트래픽을 배분한다. 가장 적은 연결 상태와 가장 짧은 응답 시간을 보이는 서버에 우선적으로 로드를 배분하는 방식이다. 

 

 

로드밸런서가 서버를 선택하는 방법 - L7 계층 

 

L7 로드밸런서는 위와 같은 L4 로드밸런서의 기능을 포함하는 것뿐만 아니라 OSI 7계층의 프로토콜(like HTTP, SMTP, FTP etc)을 바탕으로도 분산 처리가 가능하다. 

 

예를 들어, 온라인 쇼핑몰의 장바구니에 물건들을 담아놓았는데 다른 서버에서의 처리는 어려울 것이다. 

 

L7 로드밸런싱에는 다음과 같은 방법들이 있다. 

 

URL 스위칭 방식(URL Switching)

특정 하위 URL 들은 특정 서버로 처리하는 방식이다. 

 

예를 들어, '../image' 또는 '../video'와 같은 특정 URL을 가진 주소들은 서버가 아닌 별도의 스토리지에 있는 객체 데이터로 바로 연결되도록 구성할 수 있다. 

 

컨텍스트 스위칭 방식(Context Switching)

클라이언트가 요청한 특정 리소스에 대해 특정 서버 등으로 연결해줄 수 있다. 

 

예를 들어, 이미지 파일에 대해서는 확장자를 참조하여 별도로 구성된 이미지 파일이 있는 서버/스토리지로 연결해줄 수 있다. 

 

쿠키 지속성(Persistence with Cookie)

쿠키 정보를 바탕으로 클라이언트가 연결했던 동일한 서버에 계속 할당해주는 방식이다. 

 

특히 사설 네트워크에 있던 클라이언트의 IP 주소가 공인 IP주소로 치환되어 전송하는 방식을 지원한다. 

 

 

 

위 포스팅은 아래 링크를 참고하여 작성했습니다.

https://www.stevenjlee.net/2020/06/30/%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC%EC%9D%98-%EB%B6%80%ED%95%98%EB%B6%84%EC%82%B0-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-load-balancing-%EA%B7%B8/?openLinerExtension=true

https://post.naver.com/viewer/postView.nhn?volumeNo=27046347&memberNo=2521903&openLinerExtension=true

728x90

'CS > 네트워크' 카테고리의 다른 글

포워드 프록시(Forward Proxy)와 리버스 프록시(Reverse Proxy)  (0) 2021.06.17
HTTP 2.0과 특징  (0) 2021.06.11
JWT - JSON Web Token  (0) 2021.06.04
JWT - 토큰 기반 인증  (1) 2021.06.04
Authentication과 Authorization의 차이  (0) 2021.05.31

+ Recent posts