우리는 데이터를 주고 받기 위해 Server - Client 구조를 유지해야한다. 이에 따라
이러한 그림이 나올 수 있으며 Client 숫자가 많지 않을 때, Server는 여유롭게 사용자가 원하는 결과를 응답해줄 수 있다.
하지만..
Client가 한 두명이 아닌 수천만명이라면 어떨까?
Server는 모든 Client에게 응답해주기 위해 노력하지만 과부하가 발생한다. 따라서 이를 위해 두 가지 방법을 이용한다.
- Scale-Up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법
- Scale-Out : 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법
사실상 Scale-Up은 투자를 통해서만 가능하다. 따라서 우리는 Scale-Out 방법을 통해 여러 대의 Server에게 균등하게 Traffic을 분산시켜주기위해 LoadBalancer를 사용한다.
Load Balancing의 주요 기능
- NAT(Network Address Tranlation) : 사설 IP 주소를 공인 IP 주소로 바꾸는데 사용하는 통신망의 주소 변조기
- Tunneling : 인터넷상에서 눈에 보이지 않는 통로를 만들어 통신할 수 있게한다. 이 때 데이터를 캡슐화해서 연결된 상호 간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있다.
- DSR(Dynamic Source Routing protocol) : 로드 밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP 주소가 아닌 클라이언트의 IP 주소로 전달해서 네트워크를 거치지 않고 바로 클라이언트를 찾아가게끔 한다.
Load Balancer의 종류
-
L2 : MAC 주소를 바탕으로 로드밸런싱한다.
-
L3 : IP 주소를 바탕으로 로드밸런싱한다.
-
L4 : Transport Layer(IP와 Port) Level에서 로드밸런싱한다.
-
L7 : Application Layer(사용자의 Request) Level에서 로드밸런싱한다.
Load Balancer의 서버 선택 방법
- Round Robin : 프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum)로 배분하는 알고리즘
- Least Connections : 연결 개수가 가장 작은 서버를 선택하는 방식 트래픽으로 인해 세션이 길어지는 경우 권장하는 방식
- Source : 사용자의 IP를 Hashing하여 분배하는 방식. 사용자는 항상 같은 서버로 연결되는 것을 보장한다.
Load Balancer의 장애 대비
- Load Balancer를 이중화하여 장애를 대비한다.