- Scale-up : Server가 더 빠르게 동작하기 위해 하드웨어 성능을 올리는 방법.
- Scale-out : 하나의 Server 보다는 여러 대의 Server가 나눠서 일을 하는 방법.
로드밸런서 이해하기 전에, TCP와 UDP 정리
TCP는 3-way handshake를 통해 송신자와 수신자가 데이터를 주고받기 위한 최적의 상태를 제공한다.
송신자와 수신자 모두 데이터 송/수신이 가능한 상태인지, 한 번에 보낼 때 얼마나 보낼 수 있는지, 또 받을 때 얼마나 받을 수 있는지를 끊임없이 확인한다. 또 수신자가 데이터를 받다가 수신자의 Buffer가 넘쳐 일부 데이터를 유실할 경우, 재송신을 요청하기도 한다. 그만큼 데이터의 온전한 송/수신에 심혈을 기울이는데, 이를 신뢰성 있는 연결(Connection)이라고 부른다. 데이터를 온전히, 순서대로 받는 것을 중요하게 여기는 프로토콜은 TCP를 기반으로 한다.
UDP는 TCP와 다르게 신뢰성 있는 연결을 보장하지 않는다. 송신자가 수신자에게 데이터를 보내면 제대로 전송되었는지 확인하지 않으며, 데이터를 보낸 즉시 다음 데이터를 송신한다. 데이터의 순서와 도착 확인 등이 중요하지 않고 빠르고 실시간으로 전달하는 것을 중요하게 여기는 프로토콜은 UDP를 기반으로 한다.
속도보단 안전성의 기준으로 차이가 있다고 보면 이해가 쉽습니다.
이러한 TCP와 UDP를 이해하고 활용할 줄 아는 로드밸런서들은 보통 L4 스위치 혹은 L4 로드밸런서라고 부릅니다.
NLB, ALB, ELB
Network Load Balancer (NLB) 네트워크 로드 밸런서
AWS인프라에는 ALB와 NLB가 있습니다.
그중에서 NLB는 Network가 붙어 네트워크 계층(3계층)으로 혼동할 수 있으나 NLB는 4계층에 위치합니다.
초당 수백만 개의 요청을 처리할 수 있습니다. 로드 밸런서가 연결 요청을 받으면 기본 규칙의 대상 그룹에서 대상을 선택합니다. 리스너 구성에 지정된 포트에서 선택한 대상에 대한 TCP 연결을 열려고 시도합니다.
OSI 7 Layer에서 네 번째 계층인 Transport Layer를 다룬다는 것은 상위 계층인 Layer 5, 6, 7의 프로토콜을 이해하지 못한다는 것을 의미합니다. Application Load Balancer(이하 ALB)는 Layer 4의 TCP뿐만 아니라 Layer 7의 HTTP, HTTPS, WebSocket를 이해하고 처리할 수 있습니다. 이를 다시 말하면 많은 시스템 리소스를 소모해야 한다는 뜻이죠. 하지만 NLB는 Layer 4 너머의 프로토콜을 이해할 필요 없이 TCP와 UDP만을 이해만 되기에 ALB보다 시스템 리소스 소모가 적을 수밖에 없습니다. 신경 쓸 부분이 적기에 NLB는 ALB보다 더 많은 트래픽 처리가 가능하고 뛰어난 성능을 보장합니다.
Network Load Balancer의 주요 특징
- TCP/UDP 기반 라우팅
NLB는 TCP와 UDP를 이해할 수 있으며 사용자와 EC2 인스턴스의 논리적인 연결(Connection, 이하 커넥션)이 생성될 수 있도록 돕습니다. 물론 여기에 부하분산 또한 당연히 포함됩니다. 부하분산을 실시함과 동시에 사용자와 EC2 인스턴스의 커넥션을 생성하도록 돕고 자신 또한 커넥션을 가지며 관리합니다.
- SSL 인증서 탑재 가능(TLS)
NLB 또한 ALB처럼 SSL Offload를 실시할 수 있습니다. EC2 인스턴스를 대신하여 SSL Handshake를 실시하여 암호화 통신 협상을 완료하고 암호화 패킷을 주고 받으며, EC2와의 통신에서는 평문을 주고 받습니다. 이를 통해 EC2 인스턴스의 부담을 줄여줍니다.
- 로드밸런싱 방식
NLB의 로드밸런싱 방식은 5-Tuple(Source IP Address, Source Port, Destination IP Address, Destination Port, Protocol)을 기반으로 한 Flow Hash Algorithm입니다. TCP는 5-Tuple에 더해 TCP Sequence Number까지 사용하지요.
흐름 해시 알고리즘을 사용하여 부하분산을 하되 5-Tuple의 정보 일치/불일치가 커넥션 생성의 기준이 되는 듯합니다. 그렇기 때문에 5-Tuple의 정보 중 하나라도 다르다면 새로운 요청으로 간주되기 때문에 새로운 커넥션을 생성하기 위해 로드밸런싱을 실시합니다.
- 고정 IP 제공
NLB의 가장 큰 특징은 고정 IP를 갖는다는 것입니다. Private IP뿐만 아니라 Public IP까지도 고정된 IP로 제공됩니다. IP를 통한 접근 제어를 수행하고자 할 경우, 변하지 않는 IP는 매우 중요한 요소가 됩니다. 반면 ALB는 IP가 끊임없이 변화하기 때문에 ALB의 Public IP를 목적지로 삼아 접근 제어(ACL)를 실시하는 네트워크 장비(ex. 방화벽)에겐 매우 난감한 점이 아닐 수 없습니다.
- Source IP NAT & Traffic Flow
ALB가 갖지 않는 NLB의 특징은 또 있습니다. 바로 Source IP NAT 미실시와 이로 인한 Traffic Flow의 특이점입니다. 앞서 AWS Application Load Balancer 쉽게 이해하기 #1에서 ALB는 'Proxy Server(이하 프록시 서버)'로서 동작하며 모든 Traffic Flow(이하 트래픽 플로우)는 ALB를 거쳐야 하고 ALB가 EC2 인스턴스로 패킷을 전달할 때 사용자의 IP를 ALB의 Private IP로 Source IP NAT를 실시한다고 말씀드렸습니다. 그러나 NLB는 ALB처럼 트래픽 플로우를 모두 제어하지 않고 Source IP NAT도 실시하지 않습니다.
다시 말해 NLB는 Direct Server Return(이하 DSR)에 가까운 트래픽 플로우를 보여줍니다.
- 보안 그룹
NLB는 ALB와 달리 보안 그룹을 갖지 않습니다. 다시 말해 NLB의 Network Interface(이하 네트워크 인터페이스)에는 보안그룹이 적용되지 않기 때문에 보안그룹을 통한 트래픽 제어가 불가능합니다. AWS 내부의 사정으로 추측됩니다.
'IT기술 > 클라우드, VM, AWS' 카테고리의 다른 글
[AWS] 파게이트(AWS Fargate), (0) | 2023.03.27 |
---|---|
AWS Application Load Balancer(ALB) 이해하기 (0) | 2023.03.24 |
오픈스택(OpenStack)이란? (0) | 2022.11.27 |
클라우드의 문제점 (0) | 2022.11.27 |
aws cli 사용하기 (0) | 2022.10.13 |