BE

Load Balancing 이란

728x90

* 정의

Load Balancing 이란 다수의 서버가 있을 때, 요청 서비스별 트래픽을 어떻게 분산할지에 대한 아키텍쳐다.

 

 

Load Balancing 을 사용하지 않은 web infrastructure 구조는 아래와 같이 나타낼 수 있다.

출처 : https://www.digitalocean.com/community/tutorials/what-is-load-balancing#how-does-the-load-balancer-choose-the-backend-server

 

위와 같은 구조는 단일 서버만 운영하기 때문에, 서버에 오류가 생길경우, 유저는 해당 도메인에 접속하지 못하게 된다.

웹 서비스의 경우 위 처럼 한명 들어오고 단일 서버랑 연결하고 이런 단순한 1:1 구조가 아닌 경우가 대부분이다.

예를들면, 수강신청 같은 것 처럼 한번에 많은 인원이 동시에 접속하는 경우, 서버가 트래픽을 감당하지 못할 수가 있고, 사용자 입장에서도 체감상 로딩 시간이 상당히 오래 걸림을 느끼게 된다.

 

 

* 해결책

이런 문제를 해결하기 위해서는

 

1. Scale-Up : Server 가 더 빠르게 동작하도록 서버 자체의 하드웨어 성능을 높인다.

2. Scale-Out : 한 대의 서버가 아니라 다수의 서버를 운영하여 트래픽을 분산한다.

 

를 생각해볼수가 있다.

 

일반적으로 하드웨어 자체의 성능을 높이는 것 보다는 2번의 방식이 더 비용적으로 저렴하다고 한다. 

(직접 이런 큰 스케일을 다뤄보진 않아서 비용적으로 어느정도인지는 사실 체감이 안된다)

 

 

* Load Balancing 

2번의 Scale-Out 방식을 사용하여 트래픽을 분산 관리 할때 쓰이는 방법이 바로 Load Balancing 이다.

 

출처 : https://www.digitalocean.com/community/tutorials/what-is-load-balancing#how-does-the-load-balancer-choose-the-backend-server

 

위 그림은 하나의 Load Balancer 를 사용했을때의 구조를 나타낸다.

Load Balancer 하위에 여러 백엔드 서버를 두고 관리를 하는데, 모든 백엔드 서버들은 유저가 동일한 컨텐츠를 받을 수 있도록 설계되어야 한다. (App 01 에서 문제 생기면 App 02 에서 똑같은 서비스를 끊김없이 받을 수 있어야 한다)

 

그러나 위처럼 하나의 Load Balancer 만을 사용한 구조는 Load Balancer 자체가 문제가 생길 경우 웹 서버 자체에 접근 할 수 없게 된다.

 

그래서 다수의 Load Balancer 를 두고 이를 Cluster 단위로 묶어서 사용한다.

 

출처 : https://www.digitalocean.com/community/tutorials/what-is-load-balancing#how-does-the-load-balancer-choose-the-backend-server

 

위 그림을 보면, 하나의 Load Balancer 는 Active 상태로 돌입하여 서버와 연결을 하도록 도와주고,

다른 하나의 Load Balancer 는 서버와 연결을 하도록 돕는 Primary Load Balancer 의 상태를 체크한다. 

상태를 체크 한다는 것은 해당 Load Balancer 가 정상적으로 작동하는지 아닌지를 판별하는 것이다..

 

만약 Primary Load Balancer 가 오류가 생겨서 Unavailable 상태가 되면,

Secondary Load Balancer 가 그 역할을 대신한다.

 

 

그렇다면 Load Balancer 는 구체적으로 어떻게 작동하는가?

 

 

* Load Balancer 가 다룰 수 있는 트래픽

 

구체적 동작 원리를 파악하기 이전에 Load Balancer 가 다룰 수 있는 Traffic 의 종류를 알아보면

아래와 같은 4가지 타입의 트래픽을 다룬다.

 

- HTTP : HTTP 를 사용하는 Load Balancer 의 경우, 다음과 같은 세가지의 요소를 헤더에 붙여서 사용한다.

 1) X-Forwarded-For

 : 이 값은 클라이언트의 IP 주소를 식별하는데 쓰인다.

 

 2) X-Forwarded-Proto

 : 이 값은 클라이언트가 자신이 사용할 Load Balancer 에 사용된 프로토콜의 종류를 파악하는데 쓰인다 (HTTP, HTTPS  등)

 

 3) X-Forwarded-Port

 : 이 값은 클라이언트가 Load Balancer 연결에 사용한 Port Number 를 식별하는데 도움을 준다.

 

 - HTTPS : HTTPS 의 경우 HTTP 와 거의 동일하지만, 암호화 방식이 추가 되었다는 것이 차이점이다. 이 Encryption 에 사용되는 방식은 SSL passthrough, SSL termination 이 있다.

 - TCP   

 - UDP 

 

 

 

* Load Balancing 가 사용하는 주요 기술

1) NAT (Network Address Translation) : 사설 IP 주소를 공인 IP 주소 바꾸는데 사용되는 통신망의 주소 변조기를 말한다

 

2) DSR (Dynamic Source Routing protocol) : 서버에서 클라이언트로 응답을 돌려줄때, 스위치 IP 주소를 활용하는 것이 아닌, 클라이언트 IP 주소를 활용해서 바로 클라이언트에게 응답해주는 방식이다.

 

3) Tunneling : 인터넷 상에서 보이지 않는 통로를 개설해 통신할수 있게 해주는 것으로, 데이터를 캡슐화 하여, 연결된 상호 간에만 캡슐화된 패킷을 구별해 패킷을 해제하여 사용 할 수 있게 해주는 방식.

 

 

 

 

* Load Balancer 의 서버 선정 기준

Load Balancer 는 두가지 사항이 고려되면서 서버를 선택해야 한다.

 

1. Health Check 

: 앞선 그림에서도 살펴 봤듯이, 메인으로 돌리는 Load Balancer 가 있으면, 서브로 돌리는 Load Balancer 가 있어야 된다고 봤었다. 서브로 돌리는 Load Balancer 는 메인에 대한 상태체크를 하기 위해 쓰이며, 오류시 대체 용도로 쓰인다.

 

2. Load Balancing Algorithm

Load Balancer 가 서버를 선택하는 알고리즘은 아래와 같이 3가지로 나뉜다.

 

 1) Round Robin : 라운드 로빈 방식은 단순하게 순차적으로 트래픽을 각각 서버에 부여하는 방식이다. 로드 밸런서가 가지는 서버 리스트에서 트래픽이 들어온 순서대로 서버 리스트 앞에서 부터 하나씩 트래픽을 할당하는 방식이다.

 

 2) Least Connections :  이 방식은 Load Balancer 가 서버 들 중에서 연결 갯수가 가장 적은 서버를 선정해서 트래픽을 부여하는 방식으로 트래픽으로 인해서 세션이 길어지는 경우 사용한다고 한다.

 

 3) Source : 이 방식은 클라이언트 IP 주소를 해싱해서 서버를 선택하는 방식으로, 이 방식을 사용할 경우, 특정 유저가 동일서버에 계속 연결되어 있음을 보장해 줄 수 있다.

 

 

 

- References

1. https://nesoy.github.io/articles/2018-06/Load-Balancer

2. https://www.digitalocean.com/community/tutorials/what-is-load-balancing#how-does-the-load-balancer-choose-the-backend-server

3. https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/x-forwarded-headers.html

4. https://d2.naver.com/helloworld/605418

 

728x90

'BE' 카테고리의 다른 글

DNS (Domain Name System) 란?  (0) 2020.08.21
Cookie, Session, Token 이란?  (1) 2020.08.11