My Blog

로드밸런싱 구현 정리

devops

서버 로드밸런서 구현

tomatoAgent서버를 설계하면서 2가지 로드밸런서를 도입했다.
http/https로 접속하여 dns를 기반으로 로드밸런싱을 하고(L7) docker swarm으로 복제된 컨테이너에서 로드밸런싱을 진행한다.(L4)
형태는 다음 이미지와 같다.
img1
다른 블로그에서 가져온 이미지라 정확한 형태는 아니지만 전체적으로 의미는 비슷하다.
Cross-region Load Balancer가 traefik의 L7 로드밸런서이고, Public Load Balancer가 docker swarm의 L4 로드밸런서라 보면 된다.

각 로드밸런서의 역할

Traefik의 로드 밸런싱

Traefik은 애플리케이션 레벨의 리버스 프록시 및 로드 밸런서 역할을 한다.
라우팅 규칙을 세분화하여, 경로 기반 라우팅, 호스트 이름 기반 라우팅, 헤더 기반 라우팅 등 다양한 조건에 따라 요청을 다르게 분배할 수 있다.
Traefik은 Layer 7에서 로드 밸런싱을 수행한다. Layer 7응ㄴ 애플리케이션 계층으로, HTTP/HTTPS 같은 애플리케이션 프로토콜에 대한 세부 정보를 활용해 요청을 처리하고 라우팅한다.

Docker Swarm의 로드 밸런싱

Docker Swarm 자체에는 기본적인 내장 로드 밸런서가 있다. 스웜에서 서비스의 여러 복제본을 배포하면 스웜은 서비스 요청을 복제본들 사이에 자동으로 분배한다.
스웜은 기본값으로 DNS 라운드 로빈 방식을 사용해 클러스터 내 노드들 간에 트래픽을 분산한다.
스웜의 기본 로드 밸런싱은 간단하고 설정이 거의 필요 없지만, 복잡한 규칙을 설정하거나 세부적인 트래픽 제어는 어렵다.
Docker Swarm의 내장 로드 밸런싱은 Layer 4에서 작동한다. Layer 4는 전송 계층으로, IP 주소와 포트 번호를 기반으로 트래픽을 복제본들에 분배한다.

각 로드밸런서의 장점

Layer 7 로드 밸런싱 (애플리케이션 계층)

Layer 7 로드 밸런서는 HTTP/HTTPS 같은 애플리케이션 프로토콜을 이해하고, 요청의 경로, 쿠키, 헤더, 도메인 등을 기반으로 트래픽을 분배한다.
주로 리버스 프록시 역할을 수행하여 클라이언트의 요청을 세부적으로 분석한다.

  • 장점
    • 세밀한 트래픽 제어: 요청의 URL 경로, 도메인, 헤더, 쿠키, 쿼리 파라미터 등을 기준으로 트래픽을 세밀하게 라우팅할 수 있음
    • 사용자 지정 규칙: 경로 기반 라우팅, 도메인 기반 라우팅, SSL 처리, API 게이트웨이 기능 등 다양한 사용자 정의 규칙을 통해 로드 밸런싱이 가능함
    • SSL/TLS 처리: SSL/TLS 종료를 Layer 7에서 처리하여 암호화된 트래픽을 해제한 후 백엔드 서버로 전달할 수 있음
  • 한계
    • 더 높은 리소스 사용: 요청의 내용을 이해하고 처리하는 작업이 추가되기 때문에 Layer 4보다 CPU와 메모리 자원을 더 많이 사용함
    • HTTP/HTTPS에 주로 한정됨: 대부분의 Layer 7 로드 밸런서는 HTTP/HTTPS 트래픽에 최적화되어 있어, 다른 프로토콜에 대해서는 제한적인 지원을 할 수 있음

Layer 4 로드 밸런싱 (전송 계층)

Layer 4 로드 밸런서는 IP 주소와 포트 번호를 기준으로 트래픽을 분산한다.
TCP/UDP 프로토콜을 사용하여 클라이언트와 서버 간의 연결을 제어하고, 특정 서버로 트래픽을 전단한다.

  • 장점
    • 빠르고 효율적: 패킷 레벨에서 로드 밸런싱이 수행되므로 오버헤드가 적고 성능이 뛰어남
    • 낮은 리소스 소모: Layer 7보다 리소스 소모가 적기 때문에 많은 트래픽을 처리할 때 적합함
    • 프로토콜 독립성: TCP나 UDP 등 다양한 프로토콜을 처리할 수 있어, 웹 서비스 뿐만 아니라 다양한 유형의 네트워크 서비스에 적용할 수 있음
  • 한계
    • 세부 라우팅 불가능: HTTP 경로나 헤더와 같은 세부 정보를 사용하지 않으므로 특정 경로나 세부 조건에 따라 요청을 분배할 수 없음
    • 제한된 트래픽 제어: 단순히 IP와 포트를 기반으로 트래픽을 분배하기 때문에, 특정 서비스에 대한 사용자 정의 로드 밸런싱 규칙을 설정하기 어려움

Layer 4 로드 밸런싱 알고리즘 4가지

  1. 라운드 로빈(Round Robin)방식
  • 서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
  • 클라이언트의 요청을 순서대로 분배하기 때문에 여러 대의 서버가 동일한 스펙을 갖고 있고, 서버와의 연결(세션)이 오래 지속되지 않는 경우에 활용하기 적합
  1. 가중 라운드로빈 방식
  • 각각의 서버마다 가중치를 매기고 가중치가 높은 서버에 클라이언트 요청을 우선적으로 배분
  • 주로 서버의 트래픽 처리 능력이 상이한 경우 사용되는 부하 분산 방식
  1. 해시(Hash) 방식
  • 클라이언트의 IP주소를 특정 서버로 매핑하여 요청을 처리하는 방식
  • 사용자의 IP를 해싱(Hashing: 임의의 길이를 지닌 데이터를 고정된 길이의 데이터로 매핑하는 것, 또는 그라한 함수) 하여 로드를 분배하기 때문에 사용자가 동일한 서버로 연결되는 것을 보장
  1. 최소 연결(Least Connection)방식
  • 요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 우선적으로 트래픽을 배분
  • 자주 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합한 방식