ELB는 Elastic Load Balancing의 약자로 인터넷 트래픽을 다운스트림의 여러 서버(EC2)로 전달하는 서버이다. 로드 밸런서는 사용자의 트래픽을 가용 중인 여러 EC2 인스턴스에 분산하여 전달함으로써 백엔드를 더 잘 스케일링할 수 있다.
AWS에서 제공하는 로드 밸런서에는 네 가지가 있으며 각 차이점을 알고 있어야 한다.
Application Load Balancer는 HTTP, HTTPS 전용 트래픽을 위한 계층 7 유형의 로드 밸런서이다.
HTTP, HTTPS, gRPC 프로토콜이 있으면 계층 7이고 ALB라는 의미이다. 도메인 이름을 통해 다른 서비스로 라우팅할 수 있다(도메인 기반 로드 밸런싱 지원).
사용자가 방금 언급한 프로토콜 중 하나에서 로드 밸런서에 액세스하면 로드 밸런서는 트래픽을 다운스트림 EC2 인스턴스로 라우팅한다(ex: 대상을 EC2 인스턴스로 선택한 경우).
Network Load Balancer는 초고성능이며 TCP/UDP를 허용하는 계층 4 유형의 로드 밸런서이다. 초당 수백만 요청을 처리하며 IP 기반으로 로드 밸런싱을 지원한다. 이로써 클라이언트는 항상 동일한 주소로 연결할 수 있다(DNS 이름과 IP 주소 둘 다 사용 가능).
TCP 및 UDP 프로토콜에서 트래픽이 NLB로 전송되고 다운스트림 대상인 EC2 인스턴스 등으로 전달된다. ALB와 동작하는 방식이 같다.
Gateway Load Balancer는 IP 패킷 자체에서 GENEVE 프로토콜을 사용하는 계층 3 유형의 로드 밸런서이다. 트래픽을 EC2 인스턴스에서 관리하는 방화벽으로 라우팅하여 클래식 방화벽이나 침입 감지, 심층 패킷 검사 등을 실행할 수 있다는 것이다. 즉, 트래픽이 도착하기 전 트래픽을 검사하거나 분석하는 작업을 먼저 수행할 수 있게 하는 서비스이다.
GWLB는 애플리케이션에 부하를 분산하지 않는다. 트래픽 부하를 EC2 인스턴스에서 실행하는 가상 어플라이언스에 분산한다. 따라서 트래픽을 분석하거나 방화벽 작업을 실행할 수 있다. 서드 파티 보안 가상 어플라이언스라고도 하는 이유이다. 이런 어플라이언스는 여러 개 존재할 수 있다.
트래픽이 GWLB로 이동하면 먼저 트래픽을 분석할 EC2 인스턴스로 트래픽을 보낸다. 그 후에 트래픽은 다시 GWLB로 전송되고 애플리케이션으로 전달된다. GWLB는 IP 패킷 자체를 검사하고 방화벽 기능이나 침입 감지 심층 패킷 검사를 실행할 수 있도록 중간에 있다.
Classic Load Balancer는 2023년에 폐기된 이전 세대의 로드 밸런서이며 계층 4, 계층 7 유형이고 현재 ALB와 NLB로 대체되었다.
ASG는 Auto Scaling Group의 약자이다. 앞서 살펴 본 로드 밸런서를 통해 애플리케이션의 로드를 분산할 수 있었다. 그리고 백엔드에서 자동으로 이 서버들을 만들려면 ASG가 필요하다. 현실에서의 웹사이트 로드는 시간에 따라 다르기 때문이다.
클라우드에서는 매우 빠르게 서버를 만들고 없앨 수 있다. ASG의 목적은 스케일 아웃/인을 하는 것이다. 즉, 늘어난 로드에 맞춰 EC2 인스턴스를 늘리거나, 줄어든 로드에 맞춰 EC2 인스턴스를 줄이는 것이다. 이를 통해서 어느 시점이든 실행하는 머신의 숫자를 최소, 최대로 보장할 수 있다.
ASG가 EC2 인스턴스를 만들거나 제거하면 이 인스턴스들이 로드 밸런서에 등록되거나 등록 해지되는 것을 확인할 수 있다. 두 가지가 함께 동작하는 것이다.
마지막으로 애플리케이션의 버그로 인해 서버의 상태가 비정상이면 ASG는 이를 감지해서 비정상 인스턴스는 필요로 하지 않기 때문에 등록을 해지하고 종료한 뒤 새로운 정상 인스턴스로 교체한다(Health Check).
또한 ASG는 항상 최적의 용량에서 실행하기 때문에 비용을 절감할 수 있다. 이런 탄력성은 클라우드의 기본 원칙이다.
ASG의 설정
최소 용량: ASG 내에서 유지할 EC2 인스턴스의 최소 개수를 설정한다. ASG는 항상 최소 설정된 인스턴스의 개수를 유지한다.
희망 용량: 사용자가 원하는 EC2 인스턴스의 개수를 설정한다. ASG는 가능한 한 사용자가 설정한 EC2 인스턴스의 개수를 유지하려고 한다.
최대 용량: ASG가 확장할 수 있는 최대 EC2 인스턴스의 개수를 설정한다. ASG는 부하가 급증하더라도 설정한 최대 개수만큼만 EC2 인스턴스를 확장할 수 있다.
ASG와 로드 밸런서
ASG는 로드 밸런서와 함께 동작한다. 예를 들어, 1개의 ASG에 EC2 인스턴스가 1개 있으면 로드 밸런서를 통해 오는 웹 트래픽은 해당 EC2 인스턴스로 바로 리디렉션된다. ASG가 EC2 인스턴스를 추가하여 스케일 아웃 함에 따라 로드 밸런서는 이들을 등록하고 등록된 인스턴스에게도 트래픽을 보낼 것이다.
로드 밸런서는 트래픽을 분산하고, 오토 스케일링 그룹은 트래픽에 따라 스케일 아웃/인을 통해 인스턴스의 개수를 적절하게 유지한다.