load balancing 부하 분산

- 다수의 백엔드나 다운스트림 EC2 인스턴스 서버로 수신되는 트래픽을 전달하는 서버 세트
- 사진에서 사용자는 부하 분산기에 연결하는 것만 알고 있음(화살표 끝이 부하 분산기에서 끝남)
- 부하 분산기가 백엔드 인스턴스를 연결함.
- 많은 사용자 가질 수록 EC2 인스턴스에 걸쳐 더 많은 로드가 균형잡힘.
왜 로드 밸런서를 사용하는가?
- 응용 프로그램에 대한 단일 액세스 지점을 공개
- 다운 스트림 인스턴스의 처리 실패를 매끄럽게 처리.
- 상태 확인 매커니즘으로, 어떤 인스턴스로 트래픽을 보낼 수 없는지 이해할 수 있음.
- Health Check 가능
Health Check
- EC2 인스턴스가 제대로 작동하는지 확인. 작동하지 않을 시 트래픽을 보내지 않음.
- 포트와 루트에서 이뤄지고, 루트는 /health가 일반적임.

- 사진에서 프로토콜, 포트, 엔드포인트가 맞는 인스턴스에 헬스 체크를 하고, 응답이 200(ok)가 아니면 트래픽을 보내지 않음.
로드 밸런서 보안 그룹
- 유저는 HTTP(S)를 이용해 어디서든 부하 분산기에 액세스.
- EC2 인스턴스는 부하 분산기로부터 직접 오는 트래픽만 허용.
- 로드 밸런서 보안 그룹: HTTP(S) 트래픽을 포트 범위 80, 443에서 허용. 소스는 어디서든 가능하도록 0.0.0.0/0임.
- EC2 인스턴스 보안그룹: 소스가 IP 범위 아니라 보안그룹임.
ALB(Application Load Balancer)

HTTP 기반 트래픽
- 가운데 외부 응용 프로그램 부하 분산 장치가 있고, 왼쪽에 EC2 인스턴스로 대상 그룹이 있음.
- 첫 번째는, 사용자 응용 프로그램이고 라우터/유저를 위한 라우팅을 함.
- 두 번째는 검색 앱이고 수색 경로를 위한 규칙을 통해 전송됨.
- 같은 애플리케이션 부하 분산장치로 URL에서 ㅏ용되는 경로에 기반해 타깃그룹으로의 라우팅을 함.

쿼리 문자열 파라미터 라우팅
- 쿼리 문자열, 파라미터로 리디렉션하는 라우팅 규칙을 작성함.(ALB르 통해 요청 수행하는 응용 프로그램이 있을 때)
- 첫 번째 타깃 그룹은 EC2 인스턴스의 AWS에 기반함. 모바일 기반 트래픽을 첫 번째 대상그룹에.
- 두 번째 타깃 그룹은 데이터 센터에 있는 프라이빗 서버를 가짐. 데스크톱 기반 트래픽을 두 번째 대상 그룹에.
NLB(Network Load Balancer)
- TCP/UDP 트래픽
- 한 AZ 당 하나의 정적 IP

TCP 기반 트래픽
- 대상 그룹을 생성하면 네트워크 부하 분산기가 리디렉션함.
- 사진 두 번째 타깃 그룹에서, 백엔드는 HTTP 사용할 수 있지만 프론트앤드에서는 여전히 TCP를 이용함.

타깃 그룹
- 인스턴스로 리디렉션하여 트래픽 보낼 수 있음.
- 인스턴스에서 사설 IP 보낼 수 있고, 서버의 사설 IP도 사용이 가능하므로 IP 주소가 타깃 그룹 될 수 있음.
- NLB에서 고정 IP 사용, ALB에서 HTTP 유형 트래픽 처리 관련 모든 규칙 얻을 수 있으므로, ALB 타깃 그룹 가능. NLB이 ALB 앞에 있음.
GWLB(Gateway Load Balancer)

- 유저가 앱에 액세스 하는데, 모든 트래픽을 앱을 보내기 전에 검사.
- 사진을 보면, 유저가 라우트 테이블을 변경해 트래픽을 보내고 GWLB를 거치게 됨.
- GWLB는 그 트래픽을 가상 어플라이언스의 타깃 그룹으로 확장하고, 여기서 방화벽이나 침입자를 감지한 후 승인된다면 다시 GWLB로 올려보냄.
- 가상 어플라이언스에서는 네트워크 트래픽을 분석하는 것임.
Sticy Sessions
- 동일 클라이언트의 특정 세션의 요청을 처음 처리한 서버로만 전송하는 것. 첫 요청 이후의 모든 요청을 특성 서버로 리다이렉트함.
- 가장 먼저 요청에 쿠키가 존재하는지 확인한다. 쿠키가 있으면 해당 요청이 쿠키에 지정된 서버로 전송된다. 쿠키가 없는 경우, 로드밸런서가 기존 로드 밸런싱 알고리즘을 기반으로 서버를 선정한다.
크로스존 로드 밸런싱
-
- 왼쪽 그림에서, 50% 트래픽을 두 개의 ALB에 각각 보냄.
- ALB는 AZ에 상관 없이 모든 EC2에 걸쳐 트래픽을 리디렉션함. 한 ALB이 10개의 인스턴스에 5씩 분배하고, ALB이 두 개이므로 모든 인스턴스가 10을 갖게 됨.
SSL - Server Name Indication(SNI)

- 고객들이 ALB에 접속하여 WWW. mycorp 요청을 보냄.
- ALB는 SSL 인증서를 사용해 요청을 취하고, 트래픽을 암호화한 다음에 경로 덕분에 올바른 타깃 그룹인 mycorp으로 리디렉션함.
- 두 개의 ssl 인증서가 있고, 타깃그룹과 일치함.
- 특정 규칙에 기반해 두 개의 타깃그룹 중 하나로 라우팅됨.
SNI(Server Name Indication)
개념
서버 이름 지정으로, TLS 프로토콜 확장형이고 네트워크을 통하여 TCP 통신을 수행할 시에 SSL/TLS Handshake 과정을 거치는데 이때 Handshake 과정의 시작점에서 웹브라우저에게 호스트명(HTTP Header에 삽입)을 정해준다.
이 방식을 통하여 동일 서버에서 여러개의 SSL 통신이 가능하게 된다. (이 말은 곧 여러 웹 사이트의 SSL 통신이 하나의 443 포트로 가능해진다는 얘기이다.)
동작방식
웹서버에 브라우저가 https 접속할시에 SSL/TLS 접속을 하게되는데, 브라우저는 피싱사이트가 아닌 진짜 사이트에 접속된것인지 여부를 알수 있도록 서버에서 SSL 인증서를 가져오게된다. 브라우저는 가져온 인증서를 가지고 접속하고자하는 도메인 주소와 인증서의 이름을 비교하게 된다. 만일 이름이 일치하면 보안접속이 이루어 지게된다. 아니면 경고 메시지를 띄우게된다.