서버에 많은 트래픽이 가해지면 서버는 다운되고, 서비스 또한 멈출 것입니다. 이 문제를 해결하기 위해 두 가지 방법이 있는데 하나는 스케일-업, 하나는 스케일-아웃입니다.
스케일 업 : 서버의 인스턴스 성능을 올리는 방식
스케일 아웃 : 서버를 여러대로 나눠서 트래픽을 처리하는 방식
로드 밸런서는 이 스케일 아웃 방식입니다. 로드밸런서의 주요 기능은 서버 부하 분산, 로드밸런싱으로 특정 서버에 부하가 몰리지 않도록 적절히 분산하는 것입니다.
AWS ELB는 3개의 세부항목으로 나누어져있습니다. 인입되는 트래픽을 EC2, 컨테이너, IP주소, Lambda 함수와 같은 대상으로 트래픽을 분산시키는 역할을 합니다.
Load Balancing , 서버 부하 분산은 외부의 사용자로부터 들어오는 다수의 요청을 서버들에게 적절히 배분하여 서버들로 하여금 요청을 처리하게 하는 것을 말합니다.
서버 부하 분산을 담당하는 Network Switch를 L4/L7 Switch라고 부르며 Cloud 에서는 Load Balancing이라 부릅니다.
NAT
터널링 (Tunneling)
인터넷 상에서 눈에 보이지않는 통로를 만들어 통신할 수 있게 만들어주는 개념입니다. 데이터를 캡슐화해 연결된 상호간에만 캡슐화된 패킷을 구별해 캡슐화를 해제할 수 있습니다.
DSR (Dynamic Source Routing protocol)
로드밸런서 사용 시 서버에서 클라이언트로 되돌아가는 경우 목적지 주소를 스위치의 IP주소가 아닌 클라이언트의 IP주소로 전달해서 네트워크 스위치를 거치지않고 바로 클라이언트를 찾아가는 개념입니다.
Roud Robin은 로드밸런서가 다수의 서버에게 순서대로 요청을 할당하는 방법입니다. 가장 단순한 방법으로 서버군에 차례로 요청을 할당하여 분산합니다.
로드 밸런서가 서버에게 요청을 전달한 뒤, 사용자와 서버가 정상적인 연결을 맺으면 사용자와 서버는 'Connection'을 생성합니다. 로드밸런서 또한 중간자로서 Connection 정보를 갖고 있는데 이 Connection 수 정보를 기반으로 가장 Connection이 적은 서버, 즉 부하가 가장 덜한 서버에게 요청을 전달합니다.
서버의 처리 능력을 고려하여 할당할 수 있는 각 서버가 가질 수 있는 Connection의 비율을 이미 정해둡니다. 서버 부하 분산 비율이 100%라고 했을 때 성능이 가장 떨어지는 서버에게 10%를 나머지 서버 3대에게 각각 30%씩 할당 할 수 있습니다.
응답속도가 가장 빠른 서버에게 우선적으로 할당하는 방식입니다. 예를 들어 서버에 할당된 Connection 이 5개인데 서버가 보내오는 Response가 5개라면 갖고있는 Connection에 모두 응답하고 있으니 성능이 충분하다고 판단하고 추가 요청을 봽니다. 10개가 들어오면 성능이 충분치 않아 제대로 답변하지 못하는 것으로 판단하고 추가 요청을 해당 서버로 보내지 않습니다.
ELB는 AWS의 사용자 정의 네트워크인 Virtual Private Network(VPC)에 탑재되며, 사용자의 요청을 받고 이를 VPC 내의 리소스(EC 2등)에 적절히 부하 분산합니다.
리스너는 외부 요청을 받아들입니다. 그렇기 때문에 '서비스 포트'(Service Port)를 보유하고 있습니다. 이 서비스 포트로 접속하는 요청만을 처리합니다.
요청을 분산/전달할 리소스의 집합입니다. EC2 인스턴스를 오토스케일링 할 수 있는 단위로 사용됩니다. 각각의 타켓그룹에 있는 인스턴스들은 정의된 Health Checks(상태 확인)을 수행하게 됩니다.
Auto Scailing
오토 스케일링은 미리 정의한 용량 정책에 따라 EC2 인스턴스의 용량을 확대하거나 축소할 수 있습니다. EC2와 오토 스케일링을 결합해 고가용성 아키텍쳐를 구현할 수 있으며, 언제든 원하는 수만큼의 인스턴스를 운용할 수 있습니다
고가용성
서버와 네트워크, 프로그램 등의 정보 시스템이 상당히 오랜기간 동안 지속적으로 정상 운영이 가능한 성질, 보통 고가용성을 위해 2개의 서버를 연결하는 방식을 사용
Health Checks는 타켓그룹에 원하는 경로와 포트를 설정하여 HTTP 응답이 정상적으로 오는지 확인하고, 오지않는다면 비정상 상태의 인스턴스를 제외한 다른 인스턴스로만 트래픽을 분산합니다.
ALB는 Application Layer를 다루는 로드밸런서입니다.
L7 Application Layer에는 HTTP, FTP, DNS, DHCP등 프로토콜이 존재합니다.
ELB와 다르게 경로나 포트등에 따라 다른 타켓그룹으로 맵핑할 수 있습니다. 포트 단위로 연결해줄 수 있기 때문에 도커에서 유용하게 작동할 수 있고 하나의 대상그룹에 더 많은 컨테이너를 넣을 수 있어 비용을 최적화할 수 있습니다.
EC2 인스턴스, AWS 람다, IP로도 연결이 가능하고 특정한 요청에 대해서는 서버없이 응답 메세지를 작성할 수 있습니다.
HTTP를 활용한 라우팅
ALB는 HTTP의 Header, 요청 Metho등을 이용해 사용자의 요청을 적절한 대상으로 라우팅 할 수 있습니다.
로드밸런싱 방식
SSL 인증서 탑재 가능
프록시 서버로서 역할
AWS Web Application Firewall 연동
NLB는 Transport Layer를 다루는 로드밸런서입니다. L4 로드 밸런싱이기 때문에 TCP와 UDP에 대한 트래픽을 처리할 수 있고, TLS(SSL Offload)까지 가능한 로드밸런서입니다.
NLB는 사용자와 인스턴스 간의 논리적인 연결이 생성될 수 있도록 돕습니다. 부하분산을 함과 동시에 사용자와 인스턴스의 커넥션을 생성하도록 돕고 자신 또한 커넥션을 가지며 관리합니다.
TCP/UDP 기반 라우팅
로드밸런싱 방식
NLB의 로드밸런싱 방식은 5-Tuple(Source IP Address, Source Port, Destination IP Address, Destination Port, Protocol)을 기반으로 한 Flow Hash Algorithm입니다.
고정 IP 제공
NLB의 가장 큰 특징으로 고정 IP를 가집니다. Private IP뿐만 아니라 Public IP까지도 고정된 IP로 제공됩니다. ALB는 IP가 끊임업싱 변화하기 떄문에 ALB의 Public IP를 목적지로 삼아 접근 제어(ACL)을 실시하는 네트워크 장비에겐 매우 난감한 점입니다. 이러한 점을 보완하기 위해 NLB를 ALB 아단에 두고 고정된 IP를 제공하는 응용방법도 있습니다.
Source IP NAT & Traffic Flow
NLB는 ALB처럼 Traffic Flow를 모두 제어하지않고 Source IP NAT도 실시하지않습니다. 서버가 사용자에게 Response 패킷을 보낼 떄 L4 스위치를 거치지않고 사용자에게 직접 전송합니다.
보안 그룹
ALB와 달리 보안 그룹을 갖지 않습니다.
SSL 인증서 탑재 가능(TLS)
ALB처럼 SSL Offload를 실시할 수 있고, EC2 인스턴스를 대신하여 SSL Handshake를 실시하여 암호화 통신 협상을 완료하고 암호화 패킷을 주고받고, EC2 통신에서 평문을 주고 받습니다.
클랜식 로드밸런서의 단점은 서버의 기본주소가 바뀌면 로드밸런서르르 새로 생성해야하며 하나의 주소에 대상그룹을 보내게됩니다.
또한 레이어 4계층으로 작동하기 때문에 데이터를 수정, 변경할 수 없기 떄문에 포트나 헤더를 변경할 수 없습니다.
https://yoo11052.tistory.com/63
https://medium.com/harrythegreat/aws-%EB%A1%9C%EB%93%9C%EB%B0%B8%EB%9F%B0%EC%8B%B1-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-9fd0955f859e
https://aws-hyoh.tistory.com/134