Please enable JavaScript to view the comments powered by Disqus.What’s different ALB and NLB(AWS 의 ALB, NLB 차이점)
Search
🏈

What’s different ALB and NLB(AWS 의 ALB, NLB 차이점)

태그
AWS
LoadBalancer
공개여부
작성일자
2022/09/20

Load Balancer 란

특정 application 이 많은 요청에 대응하기 위해 임의의 집합 A를 생성하여 이 집합안에서 여러 서버에 접속한다고 가정하자.
요청을 받아 집합 A에 속한 서버에 요청을 전달해주기 위해 사용하는 것을 Load Balancer LB라고 표현한다.
즉, client 에 대한 단일 접점 역할을 수행한다.

AWS 의 Load Balancer

AWS 에서 공식적으로 3개의 LB를 지원한다.
그 중 고려해야 하는 것은 ALB(Application Load Balancer) 와 NLB(Network Load Balancer) 이다.

ALB

Application 이라 해서 무엇을 설치하는게 아닌 Application layer 를 의미하는 것으로 7계층의 로드 밸런서를 지원하며, 다음과 같은 기능을 수행한다.
1.
Load balancer 의 listener 가 요청을 수신하면 알맞은 protocol, port 로 매칭시켜준다.
2.
미리 정의해둔 Rule 에 근거하여 들어오는 요청을 하여 적용할 규칙을 선택하여 대상 그룹을 특정한다.
예를 들면, HTTPS Listener 를 통해 TLS, decryption 등의 작업을 ALB를 통해 수행할 수 있다.
3.
하나 이상의 대상 그룹에서 정상적으로(healthy) 동작하는 대상으로 Routing 규칙에 따라 트래픽을 route 한다.

그 외에도 다음과 같은 부수적인 기능을 제공한다.

경로 조건에 대한 지원
URL을 기반으로 요청을 전달하는 Listener 규칙을 구성할 수 있다.
Application 을 더 작은 서비스로 구성하고, 올바른 서비스로 라우팅할 수 있다.
호스트 조건에 대한 지원
HTTP header 의 host 필드를 기반으로 요청을 전달하는 Listener 에 대한 규칙을 구성할 수 있다.
즉, 하나의 ALB를 통해 여러 도메인 요청을 routing 할 수 있다.
HTTP header 조건
HTTP method, query parameter, source IP 등 request 의 필드에 기반하여 routing 지원.
단일 EC2 instance 의 여러 application 으로 요청을 routing 한다.
다른 port 에 있는 여러 대상 그룹에 등록할 수 있다.
한 URL 에서 다른 URL 로 redirection 지원
Custom HTTP 응답 회신 지원
LB 의 VPC 외부 대상을 포함하여 IP 주소로 대상을 등록 지원
Lambda 함수를 대상으로 등록
요청을 라우팅 하기 전에 Social 자격증명 등 인증 절차를 지원할 수 있다.
Container 화 된 application 을 지원한다.
Amazon ECS 를 사용함
상태 확인이 group 수준에서 정의 되고, CloudWatch 지표가 대상 group 수준에서 report 되므로 서비스의 상태를 독립적으로 모니터링 할 수 있다.
Access log 는 추가 정보를 포함하여 압축된 형식으로 저장된다.
LB의 성능을 개선한다.

NLB

4계층인 Network layer 에서 동작한다.(TCP) 따라서 성능은 ALB 보다 더 좋고 TCP header 를 다뤄야 하는데 알맞으며, TLS offloading 을 통해 부하를 분산시킬 수 있으며, 중앙 집중식 인증서 배포, UDP 지원이 있으며, 그 외에도 Application 고정 IP가 필요하면 NLB가 알맞다.
즉, 매우 짧은 지연시간을 유지하여 초당 수백만 개의 요청을 안전하게 처리할 수 있으며, 여러개의 AZ를 대응할때도 사용한다.

Overview of NLB

4번째 계층에서 작동
초당 수백만 개의 요청을 처리할 수 있다.
Listener 에서 구성된 port 에 대해 TCP 연결을 시도한다.
AZ를 교차하여 LB를 활성화 하려면 각 LB 노드가 활성화된 모든 가용 영역의 등록된 대상으로 트래픽을 분산한다.
TCP
Protocol, (src IP, src port, dst IP, dst port), TCP seq 에 따라 해시 알고리즘을 사용하여 대상 특정
TCP 연결은 src port 와 seq number 가 다르므로 다른 대상에 routing 될 수 있다.
UDP
Protocol, (Src IP, src port, dst IP, dst port) 에 따라 stream 해시 알고리즘을 사용하여 대상 특정
각 AZ에 대해 network interface를 생성한다.
시간에 따라 변화하는 트래픽에 맞춰 LB를 확장한다.
LB가 정상적인 대상에만 요청하도록 등록된 대상의 monitoring 상태 확인을 구성할 수 있다.

그 외에 다음과 같은 부수기능을 제공한다.

일시적 워크로드를 처리하고 초당 수백만 개의 요청으로 확장할 수 있다.
로드 밸런서에서 고정 IP 주소를 지원한다.
LB의 VPC 외부 대상을 포함하여 IP 주소로 대상을 등록하는 것을 지원한다.
단일 EC2 instance 의 여러 application 으로 routing을 지원한다.
여러 port 를 사용하여 instance, IP주소를 동일한 그룹으로 등록할 수 있다.
Container 화 된 application 지원 (ECS)
상태 확인이 group 수준에서 정의 되고, CloudWatch 지표가 대상 group 수준에서 report 되므로 서비스의 상태를 독립적으로 모니터링 할 수 있다.

결론

Layer 7 의 기능이 필요하다면 ALB 를 선택한다.
인증, HTTP header 등의 기능.
TCP, UDP header 를 사용해야 한다면 NLB 를 선택한다.
TLS offload 를 고려해야 할 정도.
하지만, TLS decryption 기능이 필요하면 ALB를 선택한다.
여러 AZ를 대응 해야한다면, NLB를 선택한다.
매우 고성능(초당 수백만)이 필요하면 NLB를 선택한다.
물론 이 둘을 함께 사용할 수도 있을것으로 보인다.
사용 사례를 찾아보면 ALB를 default 로 고려하고, 특정 기능이 필요할 때 NLB로 넘어간다고 한다.