Load Balancer

DaewoongJeon·2021년 6월 3일
4

Web

목록 보기
4/6

1. 개요

42서울 과제인 ft_services는 Kubernetes를 기반으로 다양한 서비스들을 배포해보는 과제입니다. Kubernetes의 node로 들어온 트래픽을 각 서비스에 분산시켜주는 Load Balancer에 대해 알아보겠습니다.

A. Load Balancer란?

: 다수의 중앙처리장치나 저장장치와 같은 컴퓨터 자원들에게 작업을 나눠주는 장치

  • 여기서 작업을 왜 나누어줘야 하고 어떻게 나눠주는지 궁금증이 생길 수 있습니다. 본 글에서는 Why와 How에 대해서 중점적으로 살펴보고 과제에 어떻게 적용될 수 있는지 살펴볼 것입니다.

B. 왜 Load Balancer를 사용하는가?

1) 문제

  1. 한 두명의 클라이언트가 서버에 요청을 보낸다면 서버는 여유롭게 응답을 보내줄 수 있습니다. 하지만, 클라이언트의 수가 수백~수천만명이라면?
  2. 클라이언트의 수가 수백~수천만명이라면 초기엔 서버가 하나씩 응답을 보내주려고 노력하겠지만, 결국엔 지쳐서 동작이 멈춘다고 합니다.

2) 해결책

  • 여기서 관리자는 두 개의 선택지를 고려할 수 있습니다.
  1. scale-up : 서버 하드웨어의 성능을 높이는 방법
  2. scale-out : 여러대의 서버를 증설하여 부하를 낮추는 방법

3) Load Balancer의 등장

  • 특별한 조건 없이 비용만을 고려한다고 했을 때, 서버 한 대의 사양을 높이는 것(scale-up) 보다 여러 대의 서버를 증설하는 것(scale-out)이 합리적입니다.
  • 서버를 증설하고 각 서버마다 공인 ip를 할당한다면 클라이언트들이 각각 다른 ip로 서버에 요청하였을 때, 개발자는 의도대로 부하를 관리하기 어려워집니다.
  • 이 때, 증설한 서버에 부하를 효율적으로 나누어줄 장치가 필요한 데 그것이 Load Balancer입니다.

2. Load Balancer의 특징

A. Load Balancer의 종류

Load Balancer는 크게 운영체제 Load Balancer와 네트워크 Load Balancer로 나뉘는데, 본 글에서는 네트워크 Load Balancer를 다룰 것입니다.

1) 네트워크 Load Balancer의 종류

  1. L2(브릿지, 허브 등)
    : Mac address를 활용한 Load Balancing을 수행합니다. 구조가 간단하고 신뢰성이 높지만, 상위계층 프로토콜을 기반으로 스위칭이 불가능 하다는 특징을 가지고 있습니다.
  2. L3(Router, ICMP 프로토콜, IP)
    : IP address를 활용한 Load Balancing을 수행합니다. 지속적으로 트래픽을 체크해줄 수 있지만, 특정 프로토콜을 이용해야 스위칭이 가능하다는 특징을 가지고 있습니다.
  3. L4(TCP, UDP Protocol)
    : IP + Port를 활용하여 Load Balancing을 수행합니다. port기반으로 스위칭을 해주고 Virtual IP를 활용하여 여러대를 한 대로 묶어 부하분산을 시켜줄 수 있습니다. 주로 Round Robin 방식이 활용됩니다.
  4. L7(HTTP, FTP, SMTP Protocol)
    : 사용자 Request를 기반으로 Load Balancing을 수행합니다.
    ex) 213.12.32.123:80, 213.12.32.123:1024 + GET/ img/aaa.jpg

B. Load Balancer의 동작 방식

여러 Load Balancer가 있지만, 본 글에서는 L4 Load BalancerL7 Load Balancer를 다뤄보겠습니다.

1) Load Balancer 동작 방식

  • 기본적인 방식인 Bridge/Transparent Mode로 살펴보겠습니다.
  1. 클라이언트가 Load Balancer에 서비스를 요청합니다.
  2. Load Balancer가 NAT(Network Address Translation)를 활용하여 받은 패킷의 IP 및 MAC 주소를 변조하고 실제 서버에 요청을 보냅니다.
  3. 실제 서버가 Load Balancer로 요청에 대한 응답을 보냅니다.
  4. Load Balancer는 NAT를 활용하여 실제 서버 IP 주소를 Load Balancer IP 주소로 변환하고 클라이언트에 응답을 보냅니다.

2) Load Balancer의 주요 기능

  • Load Balancer는 아래 기능들을 통해 Load Balancing을 수행합니다.
  1. Network Address Translation(NAT) : 사설 IP를 공인 IP로 바꾸거나 공인 IP를 사설 IP로 바꿔줍니다.
  2. Tunneling : 데이터를 캡슐화하여 연결된 노드만 캡슐을 해제할 수 있게 합니다.
  3. Dynamic Source Routing protocol(DSR) : 요청에 대한 응답을 보낼 때 로드밸런서가 아닌 클라이언트의 IP로 직접 보냅니다.(응답 시 Load Balancer를 경유하지 않음)

3) 서버를 선택하는 방법

  1. Round Robin : 요청이 들어오는 대로 서버에 균등하게 요청을 분배합니다. 가장 단순한 분배 방식입니다.
  2. Weighted Round Robin Scheduling : Round Robin방식으로 분배하지만 서버의 가중치에 따라 요청을 더 분배하기도, 덜 분배하기도 합니다. 서버 가중치는 사용자가 지정할 수 있고 동적으로 조정되기도 합니다.
  3. Least Connection : 서버마다 연결된 커넥션이 몇개인지 체크하여 커넥션이 가장 적은 서버로 요청을 분배하는 방식입니다.
  4. Weighted Least Connections : Least Connection방식으로 분배하지만 서버 가중치에 따라 요청을 더 분배하기도, 덜 분배하기도 합니다. 서버 가중치는 사용자가 지정할 수 있고 동적으로 조정되기도 합니다. 서버 풀에 존재하는 서버들의 사양이 일관적이지 않고 다양한 경우 이 방법이 효과적입니다.
  5. Fastest Response Time : 서버가 요청에 대해 응답하는 시간을 체크하여 가장 빠른 서버로 요청을 분배하는 방식입니다.
  6. Source Hash Scheduling : 사용자의 IP를 해싱한 후 그 결과에 따라 서버로 요청을 분배합니다. 사용자의 IP는 고정되어 있기 때문에 항상 같은 서버로 연결된다는 보장을 받을 수 있습니다.(연결 보장)

4) L4 vs L7


출처 : https://velog.io/@makeitcloud/%EB%9E%80-L4-load-balancer-vs-L7-load-balancer-%EB%9E%80

3. 참고

0개의 댓글