Load Balancer

hyeon.z·2022년 11월 21일
0
post-thumbnail

Load Balancer

등장 배경
Client가 한 두명인 경우 Server 한 대로도 여유롭게 응답할 수 있다. 만약 사용자가 수십만명 이라면 어떻게 될까? 한 대의 서버로는 요청을 다 처리할 수 없을 것이다.
요청을 해결하려면 어떻게 할까?

  • scale-up: Server가 더 빠르게 동작하기 위해 사양을 올리는 방법
  • scale-out: Server의 개수를 늘리는 방법

https://tecoble.techcourse.co.kr/post/2021-10-12-scale-up-scale-out/

로드 밸런서란?
요청 트래픽이 많을 때, 여러 대의 서버로 scale-out하고 요청을 골고루 분산처리하여 서버의 로드율 증가, 부하량, 속도 저하 등을 해결하기 위해 로드 밸런서가 등장했다.

Load Balancer의 역할

  • 요청 분산
    • 전송된 요청을 여러 웹 서버에 균등하게 분산하는 것
  • SSL 처리
    • 송수신 하는 데이터를 암호화 하는 SSL(https 통신에서 사용) 처리
    • 데이터 암호화/복호화 처리는 복잡한 계산을 수행해야 하므로 웹 서버에서 할 경우 부담이 많이 발생
    • 로드 밸런서에서 담당하여 성능 향상의 효과
  • 부정 요청 대응
    • 부정한 접근을 감지하는 처리를 웹 서버에서 할 경우 부담이 많이 발생, 서버 탈취 위험
    • 로드 밸런서에서 담당하여 성능 향상의 효과
    • 웹 서버별로 대책 수립하는 것보다 효율적

Load Balancing Algorithm

Round Robin
서버에 들어온 요청을 순서대로 돌아가며 배정하는 방식
서버와의 연결이 오래 지속되지 않을 경우 적합

가중 Round Robin
각 서버에 가중치를 매기고 가중치가 높은 서버에 요청을 우선적으로 배정하는 방식
서버의 트래픽 처리 능력이 다를 경우 사용

최소 연결 방식 (Least Connection Method)
요청이 들어온 시점에 가장 적은 연결 상태를 보이는 서버에 트래픽을 배정하는 방식
서버에 들어온 트래픽들이 일정하지 않은 경우에 적합

IP Hash 방식
클라이언트의 IP 주소를 특정 서버로 매핑하여 요청을 처리하는 방식
사용자가 항상 동일한 서버로 연결됨

최소 응답 시간 방식 (Least Response Time Method)
가장 적은 연결 상태와 가장 짧은 응답 시간을 보이는 서버에 우선적으로 배정

쿠키 지속성 (Persistence with Cookies)
쿠키 정보를 바탕으로 클라이언트가 연결했었던 서버에 계속 할당

Context Switching
클라이언트가 요청한 특정 리소스에 따라 특정 서버로 연결
ex) 이미지 파일에 대해서 확장자를 참조해 별도로 구성된 이미지 파일이 있는 서버 또는 스토리지에 직접 연결

URL Switching
특정 하위 URL들은 특정 서버로 처리

Load Balancer의 기본 기능

  • Health Check
    • 서버들에 대한 주기적인 health check를 통해 서버들의 장애 여부를 판단
    • 덕분에 fail-over가 가능
    • TCP/UDP 분석이 가능해 Firewall의 역할도 수행 가능
   - L3: ICMP를 이용해 서버의 IP 주소가 통신 가능한 상태인지 확인
   - L4: TCP의 경우 3way-handshaking 특성을 기반으로 포트 상태 체크
   - L7: 실제 웹 페이지에 통신 시도해 이상 유무 파악
  • Tunneling
    • 눈에 보이지 않는 통로를 만들어 통신 할 수 있게 하는 개념
    • 클라이언트와 서버 간 터널링을 제공해 연결된 상호간에만 캡슐화된 패킷을 구별해 캡슐화를 해제 하도록 함
  • NAT (Network Address Translation)
    • IP주소를 변환해 주는 기능 (사설IP → 공인IP / 공인IP → 사설IP)
    • 부족한 공인 IP주소를 효율적으로 사용 가능
    • 여러개의 호스트가 하나의 공인 IP주소를 통해 접속
  • DSR (Direct Server Routing)
    • server → client 의 경우, 목적지를 클라이언트로 설정한 다음 네트워크 장비나 로드 밸런서를 거치지 않고 바로 클라이언트를 찾아가는 방식
    • 로드 밸런서의 부하를 줄일 수 있음

Load Balancing의 종류

  • L2
    • Mac주소를 바탕으로 Load Balancing
  • L3
    • IP주소를 바탕으로 Load balancing
  • L4
    • Transport 계층(전송 계층) 에서 Load Balancing
    • IP와 Port 부하 분산
    • 데이터를 변경/수정 할 수 없음
    • 패킷 레벨에서만 트래픽을 분산하기 때문에 속도가 빠르고 효율이 높음
    • 섬세한 라우팅이 불가능하지만 L7로드 밸런서보다 가격이 저렴
    • TCP, UDP
  • L7
    • Application 계층(응용 계층) 에서 Load Balancing
    • URL 또는 HTTP 헤더에서 부하 분산
    • 포트나 헤더등의 정보를 수정 할 수 있음
    • 패킷 내용을 확인하고 그 내용에 따라 트래픽을 특정 서버에 분산하는 것이 가능
    • 섬세한 라우팅이 가능하고, 비정상적인 트래픽을 필터링 할 수 있음
    • 패킷의 내용을 복호화 하기 때문에 더 많은 비용 필요
    • HTTP(80), HTTPS(443), FTP(21), WebSocket

AWS의 Load Balancer

AWS에는 ELB(Elastic Balancing)라는 서비스로 로드 밸런서를 제공하며, 아래와 같은 종류로 나눌 수 있다.

종류특징용도
ALB (Application Load Balancer)http, https 접근에 특화웹 사이트나 REST API를 제공하는 사이트
NLB (Network Load Balancer)다양한 통신에 대응 가능게임, 채팅 등
CLB (Classic Load Balancer)옛날에 사용하던 로드밸런서특별히 사용하는 경우 없음

ALB 추가 설명

  • L7, application layer의 프로토콜에 대한 부하 처리
  • Listen: http, https, gRPC
  • Target: IP, Instance, Lambda
  • port 단위로 연결 가능 → 도커에서 유용하며 하나의 대상 그룹에 더 많은 컨테이너를 넣을 수 있어 비용 최적화 가능
  • 특정 요청에 대해 서버 없이 응답 메시지 작성 가능
  • 기본 라우팅 알고리즘은 Round Robin
  • Reverse Proxy 대로 Client IP와 서버사이에 들어오고 나가는 트래픽이 모두 Load Balancer와 통신
  • CLB/ALB는 Security Group을 통한 보안 가능
  • Client → Load Balancer의 Access 제한 가능
  • CLB/ALB는 IP 주소가 변동되기 때문에 Client에서 Access 할 ELB의 DNS Name을 사용

NLB 추가 설명

  • L4, Transport Layer의 프로토콜에 대한 부하 처리
  • Listen: TCP, UDP, TLS
  • Target: IP, Instance
  • Client IP와 서버사이에서 서버로 들어오는 트래픽은 Load Balancer를 통하고 나가는 트래픽은 Client IP와 직접 통신
  • NLB는 Security Group 적용이 되지 않아서 서버에 적용된 Security Group에서 보안이 가능합니다.
  • Client → Server에서 Access 제한 가능
  • NLB는 할당한 Elastic IP 를 Static IP로 사용이 가능하여 DNS Name과 IP주소 모두 사용 가능 (private, public IP 둘 다 고정)

Load Balancer 주요 성능 지표

  • 초당 연결 수 (Connections per second)
    • 최대 처리 가능한 초당 TCP 세션 개수
  • 동시 연결 수 (Concurrent connections)
    • 동시에 유지할 수 있는 최대 세션 개수
  • 처리 용량 (Throughput)
    • UDP 프로토콜에 대한 로드 밸런싱 성능 지표
    • FWLB(Firewall Load Balancing)에서 중요
    • 단위: bps(bit per second), pps(packet per second)
profile
software engineer

0개의 댓글