본문 바로가기

AWS

AWS의 로드 밸런싱 : Elastic Load Balancing

728x90

현대의 트래픽이 많은 웹사이트는 사용자의 동시 요청이 수십만건~수백만건으로 제공되어야 하며 올바른 텍스트, 이미지, 동영상, 애플리케이션 데이터를 빠르고 안정적으로 반환해야 한다 >> 이때 필요한 게 로드 밸런싱

 

로드 밸런싱? 서버가 처리해야 할 업무나 요청(load)을 여러 대의 서버로 나누어(balancing) 처리하는 것을 의미!

 

이런 대용량 볼륨 요구사항을 지원하려면 추가 서버가 필요하다

-> Elastic Load Balancing은 수신되는 애플리케이션이나 네트워크 트래픽을 단일 가용 영역이나 여러 가용 영역의 EC2 인스턴스, 컨테이너, IP 주소, Lambda 함수와 같은 여러 대상에 분산하는 AWS 서비스이다

 

시간이 지나면서 애플리케이션의 트래픽이 변경됨에 따라 로드 밸런서를 조정한다

대부분의 워크로드를 지원하도록 자동으로 확장 가능

 

 

세 가지 유형의 로드 밸런서

1. Application Load Balancer

  • 이 로드 밸런서는 요청의 콘텐츠에 따라 트래픽을 대상으로 라우팅한다
  • HTTP나 HTTPS 트래픽의 고급 로드 밸런싱에 매우 적합
  • 마이크로서비스나 컨테이너 기반 애플리케이션을 비롯하여 최신 애플리케이션 아키텍처를 제공하는 것을 목표로 하는 고급 라우팅 기능을 제공
  • 항상 최신 Secure Sockets Layer나 Transport Layer Security 암호 및 프로토콜이 사용되도록 하여 애플리케이션 보안을 간소화, 개선함
  • 애플리케이션 레벨이나 OSI 모델의 계층 7(응용 계층! Application Layer)에서 작동

2. Network Load Balancer

  • 네트워크 전송 레벨이나 OSI 모델의 계층 4(전송 계층! Transport Layer)에서 작동
  • IP 프로토콜 데이터를 기반으로 트래픽을 대상으로 라우팅
  • TCP, UDP 트래픽의 로드 밸런싱에 적합
  • 매우 짧은 지연시간, 초당 수백만 개의 요청 처리 가능
  • 갑작스러운 일시적 네트워크 트래픽 패턴을 처리하는데 최적화

3. Classic Load Balancer(이전 구현 버전)

  • 여러 EC2 인스턴스에 기본 로드 밸런싱을 제공
  • 애플리케이션 계층(7 계층)과 전송 계층(4 계층)에서 모두 작동
  • HTTP, HTTPS, TCP, SSL 프로토콜을 사용하는 애플리케이션의 로드 밸런싱을 지원

-> 가능하면 Application Load Balancer나 Network Load Balancer를 사용하는 것이 좋다

 

 

작동 방식

  • 로드 밸런서는 클라이언트로부터 수신되는 트래픽을 수락, 하나 or 여러 가용 영역의 등록된 대상으로 요청을 라우팅
  • 하나 이상의 리스너를 지정하여 수신 트래픽을 허용하도록 로드 밸런서를 구성
  • 리스너는 연결 요청을 확인하는 프로세스로 HTTP와 같은 프로토콜, 포트 80과 같은 포트 번호로 구성되고, 마찬가지로 로드 밸런서와 대상 간의 연결을 위한 프로토콜 및 포트 번호로 구성됨
  • 등록된 대상의 상태를 모니터링 하는 데 사용되는 상태 확인을 수행하도록 로드 밸런서를 구성할 수도 있음 -> 로드 밸런서가 정상적인 인스턴스에만 요청을 전송
  • 로드 밸런서가 비정상 대상을 감지하면, 해당 대상으로 트래픽 라우팅을 중단함
  • 비정상 대상이 다시 정상으로 감지되면 트래픽을 해당 대상으로 다시 라우팅함

 

https://jayendrapatil.com/aws-elastic-load-balancing/

그림은 그렇게 연관되어 있지 않지만 로드 밸런서가 클라이언트에서 수신되는 트래픽을 받아들이고, 가용 영역에 나누어 라우팅한다는 것을 보여주고 싶었음

가용 영역 안에 리스너가 있는 것이고 리스너 밑에 대상이 있어서 라우팅을 정상이면 라우팅을 하고, 비정상이면 라우팅 하지 않음

 

<로드 밸런서 유형이 구성되는 방법의 차이점>

- Application Load Balancer나 Network Load Balancer를 사용할 때는 대상 그룹에 대상을 등록하고 대상 그룹으로 트래픽을 라우팅함

- Classic Load Balancer를 사용하는 경우에는 로드 밸런서에 인스턴스를 등록함

 

 

사용 사례

  • 고가용성과 내결함성 ↑

여러 가용 영역의 정상적인 대상 간에 트래픽을 밸런싱 함

단일 가용 영역에 있는 하나 이상의 대상이 정상 상태가 아닐 경우, ELB는 다른 가용 여역에 있는 정상 상태인 대상으로 대상 트래픽을 라우팅함

대상이 정상으로 복구되면 ELB는 대상에 대한 트래픽을 자동으로 제거

  • 컨테이너 애플리케이션

ELB에 대해 향상된 컨테이너가 지원됨 -> 로드 밸런서를 사용하여 컨테이너화된 애플리케이션을 동일한 EC2 인스턴스의 여러 포트에 걸쳐 자동으로 로드 밸런싱할 수 있음

완전 관리형 컨테이너 상품을 제공하는 Amazon Elastic Container Service와의 통합도 활용 가능 -> 서비스를 로드 밸런서에 등록하기만 하면 Amazon ECS가 Docker 컨테이너의 등록/등록 취소를 투명하게 관리

로드 밸런서는 포트를 자동으로 탐지하여 동적으로 스스로를 재구성함

  • 탄력성 및 확장성
  • VPC
  • 하이브리드 환경
  • HTTP(S)를 통해 Lambda 함수 호출

 

로드 밸런서 모니터링

- Amazon CloudWatch 지표 사용

ELB는 로드 밸런서와 대상의 데이터 포인트를 Amazon CloudWatch에 게시

-> 데이터 포인트에 대한 통계를 정렬된 시계열 데이터 세트로 검색 가능(이런 통계를 지표라고 한다)

지표를 사용하여 시스템이 예상대로 수행되고 있는지 확인 가능

 

- 액세스 로그

로드 밸런서에 보낸 요청에 대한 세부 정보 수집, S3에 로그 파일로 저장 가능

트래픽 패턴을 분석하고 대상이나 백엔드 애플리케이션의 문제 해결 가능

 

- AWS CloudTrail

ELB API에 보낸 호출에 대한 자세한 정보를 캡처하고 S3에 로그 파일로 저장 가능

CloudTrail 로그를 사용하여 누가 호출했는지, 어떤 호출이 이루어지고, 언제 호출이 이루어졌는지, 어떤 IP 주소에서 호출했는지 확인 가능

 

 

 

728x90