[AWS] 로드벨런서(Load Balancer) - ALB, NLB
이전 [ 로드벨런서의 리스너 설정 ] 포스트(https://log4day.tistory.com/33?category=1038764)에서 ALB와 NLB에 관련된 내용이 있었다. 이와 관련해 로드벨런서에서 ALB와 NLB의 차이점과 특징을 조금 더 상세히 정리해보았다.
로드벨런서(Load Balancer)
로드밸런서는 서버에 트래픽을 분산시키는 장치다. 부하 분산이라고 하여, 서버에 네트워크 또는 애플리케이션 트래픽이 쏠리지 않게 관리해준다. 로드벨런서는 동일한 애플리케이션이 구동되는 둘 이상의 서버를 묶어 사용자로부터 들어오는 요청을 중간에서 분산 처리한다. 쉽게 말해, 서버와 사용자 사이의 중간 다리로서 역할을 한다고 할 수 있다.
로드벨런서는 일반적으로 Layer 4 계층 Layer 7 계층 두 가지로 나누어 볼 수 있다. 여기서, Layer 4 단계의 로드 밸런서가 NLB(Network Load Balancer), Layer 7 단계의 로드 밸런서가 ALB(Application Load Balancer)다.
- Layer 4 : 네트워크 및 전송 계층 프로토콜(TCP, UDP)에서의 사용자 요청 (-> NLB)
- Layer 7 : HTTP(S)와 같은 애플리케이션 계층 프로토콜에서의 사용자 요청 (-> ALB)
ALB와 NLB의 차이점은 프로토콜에 있다. 앞서 언급했듯, ALB는 TCP, UDP 프로토콜을 지원하며, NLB는 HTTP(S) 프로토콜을 지원한다. 그렇기 때문에, NLB는 VPC와 같은 Private한 네트워크 환경에서 사용되며, ALB는 HTTP 통신이 이루어지는 Public 환경에서 동작한다.
덧붙여, 이러한 네트워크 환경 차이로 SSL(=HTTPS) 인프라 구축은 ALB에서만 가능하다. NLB 환경에서 SSL 적용은 애플리케이션이 실행되는 서버 내부에서 잡아주어야 한다.
ALB(Application Load Balancer)
ALB는 애플리케이션(Application Load Balancer)의 약자로 네트워크 7 계층(L7, Layer 7)에 대한 라우팅 규칙을 지원한다. 프로토콜은 HTTP
와 HTTPS
를 지원한다. (NLB는 TCP, UDP 지원)
네트워크적 특정 때문에 ALB는 주로 웹 애플리케이션을 연결할 때 사용된다. EC2 인스턴스(혹은 도커 이미지) 앞단에서 사용자의 HTTP(S) 요청에 대한 부하 분산을 처리한다.
NLB(Network Load Balancer)
NLB는 네트워크 로드벨런서(Network Load Balancer)의 약자로 네트워크 4 계층(L4, Layer 4)에 대한 라우팅을 규칙을 지원한다. 대표적으로 TCP
및 UDP
프로토콜을 지원하며(ALB는 HTTP, HTTPS 지원), 정적 IP 주소를 라우팅 포인트로 설정한다.(단, Elastic IPs는 지원됨)
앞서 언급했듯, NLB는 Private한 환경에서 부하 분산을 처리할 때 사용된다. VPC처럼 서버가 Private IP로 구성된 환경에서 트래픽을 분산처리할 때 로드벨런싱 설정은 NLB을 말한다. 예를 들어, 웹 애플리케이션을 통해 내부 API 요청이 전달될 때, 이 API 요청에 대한 로드벨런싱을 NLB가 처리할 수 있다는 것으로 이해할 수 있다. (= apache에서 API에 대한 요청을 proxy pass 혹은 vhost로 처리할 때, NLB 엔드포인트로 부하 분산 시키는 것)
참고
https://iamondemand.com/blog/elb-vs-alb-vs-nlb-choosing-the-best-aws-load-balancer-for-your-needs/