
애플리케이션 시스템이 조정을 통해 더 많은 양을 처리할 수 있다는 의미
인스턴스의 크기 확장 (scale up/down)
ex) t2.micro => t2.large로 구동하게끔 바꿈
데이터 베이스와 같이 분산되지 않은 시스템에서 흔히 사용
=> 하위 인스턴스의 유형을 업그레이드해 수직적으로 확장할 수 있는 시스템
ex) RDC, ElastiCache
일반적으로 확장할 수 있는 정도에 한계가 있음 (하드웨어 제한)
애플리케이션에서 인스턴스나 시스템의 수를 늘리는 방법 (scale out/in)
ex) 다른 스케일링 그룹, 로드밸런서
분배 시스템이 있다는 것을 의미
ex) 웹, 현대적 애플리케이션
aws EC2 같은 클라우드 제공 업체 덕에 수평적인 확장이 더욱 수월해짐
수평확장성과 같이 쓰이는 개념(항상은 아님)
애플리케이션 또는 시스템을 적어도 둘 이상의 AWS의 AZ가 데이터 센터에서 가동 중인 것을 의미
동일 애플리케이션의 동일 인스턴스를 다수의 AZ에 걸쳐 실행하는 경우
ex) 다중 AZ가 활성화된 자동 스케일러 그룹, 로드밸런서
데이터 센터에서의 손실에서 살아남는 것이 목표
=> 센터 하나가 멈춰도 계속 작동하게끔
수동적(passive)일 수 있음 (RDS 다중 AZ를 갖추고 있는 경우)
활성형(active)일 수 있음 (수평 확장을 하는 경우)
서버 혹은 서버셋으로 트래픽을 백엔드나 다운스트림 EC2 인스턴스 또는 서버들로 전달하는 역할
/health가 일반적)클래식 로드 밸런서(CLB)
기존세대, V1이라고 함, 2009년도에 만들어짐
HTTP, HTTPS, TCP, SSL, secure TCP 지원
aws는 사용을 권장하지 않음
신형 로드 밸런서(ALB)
2016년 출시, V2
HTTP, HTTPS, WebSocket 프로토콜 지원
네트워크 로드 밸런서(NLB)
2016년 출시, V2
TCP, TLS, secure TCP, UDP 프로토콜 지원
게이트웨이 로드 밸런서(GWLB)
2020년 출시
네트워크 층에서 작동함 => 3계층과 IP 프로토콜에서 작동
일부 로드밸런서는 내부에 설정될 수 있어 네트워크에 개인적 접근이 가능함
웹 사이트와 공공 애플리케이션 모두에 사용이 가능한 외부 공공 로드밸런서도 있음
HTTP나 HTTPS를 사용해 어디서든 로드 밸런서에 접근 가능
포트 범위는 80 혹은 443
소스는 0.0.0.0/0
로드 밸런서는 들어오는 트래픽만을 허용해야 하기 때문에 EC2 인스턴스의 보안 그룹 규칙은 다름
=> 포트 80에서 HTTP 트래픽을 허용하여 소스는 IP 범위가 아니라 보안 그룹이 됨
EC2 인스턴스의 보안 그룹을 로드 밸런서의 보안 그룹으로 연결
=> EC2 인스턴스는 로드 밸런서에서 온 트래픽만을 허용할 수 있음, 보안 강화
X-Fowarded-For 헤더에 삽입됨X-Fowarded-Port를 사용하는 포트와 X-Fowarded-Proto에 의해 사용되는 프로토콜도 얻게 됨X-Fowarded-Port와 X-Fowarded-Proto를 확인해야 함




DNS주소에 들어가서 새로고침하면, 새로고침할 때마다 로드 밸런서가 두 EC2 인스턴스를 바꿔가며 리디렉션해주기 때문에 주소가 바뀜을 볼 수 있음
현재는 각 생성한 두 개의 인스턴스의 퍼블릭 IP를 통해 접근할 수 있음
또한 로드 밸런서의 DNS 이름을 통해서도 접근이 가능함
권장되는 방법은 EC2 인스턴스에 엑세스할 때는 로드 밸런서를 통해서 해야 함

인스턴스에서 설정한 보안 그룹에서 인바운드 규칙 편집하기를 해 해당 EC2 인스턴스로 허용되는 트래픽은 로드 밸런서를 통해서 오는 것만으로 설정한다

다음과 같이 인스턴스에 접근할 수 없기 때문에 타임아웃이 발생함, 로드밸런서 쪽은 정상적으로 접근이 가능함


조건 : 역할의 요청을 무엇으로 필터할 것인가


/error로 접근하는 경우 해당 응답값을 반환할 예정임

/error로 접근하는 경우에 다음과 같이 뜸
대상 그룹을 생성하면 NLB가 리디렉션 함
TCP 트레래픽이나 백엔드는 HTTP를 사용하면서 프론트엔드는 여전히 TCP를 사용할 수도 있음

=> GWLB의 기능은 네트워크 트래픽을 분석하는 것
작동 원리 : IP 패킷의 네트워크 계층인 L3에서 작동
투명 네트워크 게이트 웨이 : VCP의 모든 트래픽이 GWLB가 되는 단일 엔트리와 출구를 통과하기 때문
로드 밸런서 : 대상 그룹의 가상 어플라이언스 집합에 전반적으로 그 트래픽을 분산
6081번 포트의 GENEVE 프로토콜을 사용함
애플리케이션에서 기간을 지정할 수 있음

대상 그룹으로 가서 작업 - 대상 그룹 속성 편집에서 고정 세션 활성화 가능

교차 영역 로드 밸런싱이 적용되면 각 로드 밸런서 인스턴스는 모든 가용 영역에 등록된 모든 인스턴스에 고르게 분포됨

교차 영역 로드 밸런싱이 없는 경우에는 요청이 탄력적 로드 밸런서 노드의 인스턴스로 분산됨
각 ALB가 해당 영역에 있는 EC2 인스턴스로만 트래픽을 전송함
트래픽이 각 가용 영역에 한정되므로 각 가용 영역에 있는 EC2 인스턴스 개수가 불균형하면 특정 가용 영역에 있는 EC2 인스턴스는 더 많은 트래픽을 받게 됨
SSL 인증서는 클라이언트와 로드 밸런서 사이에서 트래픽이 전송되는 동안 암호화하도록 도와줌(전송 중 암호화)
즉 데이터가 네트워크를 통과하는 중에는 암호화되어 있고 발신자와 수신자만 해독 가능
SSL은 보안 소켓 계층이라는 뜻이며, 연결을 암호화할 때 사용됨
TLS는 SSL의 새 버전 이고 전송 계층 보안이라는 뜻
TLS가 더 주로 사용되지만 여전히 SSL이라고 부름
퍼블릭 SSL 인증서는 인증 기관(Certificate Authorities)에서 발행
로드 밸런서에 첨부된 퍼블릭 SSL 인증서를 활용하면 클라이언트와 로드 밸런서 사이의 연결을 암호화 가능
SSL 인증서에는 사용자가 정한 만료 날짜가 있으며, 인증서의 진위를 확인하기 위해 주기적으로 갱신해야 함
사용자는 HTTPS를 통해 연결 (S는 SSL 인증서, 암호화 + 안전)
공용 인터넷을 통해 로드 밸런서에 연결
내부족으로 로드 밸런서는 SSL 종료
백엔드에서는 HTTP를 통해 EC2 인스턴스와 통신 => 암호화 x
트래픽은 VPC, 즉 프라이빗 트래픽(네트워크)를 통해 전송
로드밸런서는 X.509 인증서를 로딩(SSL/TLS 서버 인증서)
AWS는 ACM(AWS 인증서 매니저)를 활용해 SSL 인증서를 관리할 수 있음
ACM에 인증서 업로드도 가능
HTTPS 리스너를 설정할 때는
하나의 웹 서버에 여러 SSL 인증서를 로드해 웹 서버가 여러 웹 사이트를 지원하게 만드는 방법
클라이언트가 초기 SSL 핸드셰이크에서 대상 서버의 호스트 이름을 표시해야 하는 새 프로토콜
클라이언트가 '이 웹 사이트에 연결하고 싶다'고 하면 서버는 어떤 인증서를 로드해야 하는지 알 수 있음
모든 클라이언트가 지원하는 것은 아님, 최신 세대인 ALB, NLB를 활용할 때만 적용(CLB는 x), 혹은 CloudFront
여러 SSL 인증서로 여러 리스너 지원 가능
SNI 이용하면 됨
여러 SSL 인증서로 여러 리스너 지원 가능
SNI 이용하면 됨
클래식 로드 밸런서인 경우에는 연결 드레이닝이라고 부름
애플리케이션 밸런서나 네트워크 로드 밸런서를 사용하는 경우에는 등록 취소 지연(Deregistration Delay)이라고 부름
인스턴스가 등록 취소 혹은 비정상인 상태에 있을 때 인스턴스에 어느 정도 시간을 주어 인플라이트 요청, 즉 활성 요청을 완료할 수 있도록 함
연결이 드레이닝되면(인스턴스가 드레이닝되면) ELB는 등록 취소 중인 EC2 인스턴스로 새로운 요청을 보내지 않음
인스턴스가 Draining(드레이닝) 상태란?
Draining 상태가 되는 경우
연결 드레이닝 파라미터는 매개변수로 표시 가능
1 ~ 3600초 사이의 값, 기본값은 300초(5분)
0으로 설정하면 전부 다 비활성화 할 수 있음 => 드레이닝이 일어나지 않는다
짧은 요청의 경우에는 낮은 값으로 설정
요청 시간이 매우 긴, 업로드 또는 오래 지속되는 요청 등의 경우에는 어느 정도 높은 값으로 설정하면 됨
웹사이트나 애플리케이션을 배포하면 시간이 지나면서 로드가 변할 수 있음
클라우드에서 AWS에서는 EC2 인스턴스 생성 api 호출로 빠르게 서버를 생성하고 제거할 수 있음
=> 이를 자동화하고 싶을 때 오토 스케일링 그룹을 생성
스케일 아웃 : EC2 인스턴스를 추가해서 늘어난 로드에 맞춤
스케일 인 : 줄어든 로드에 맞추기 위해 EC2 인스턴스를 제거
따라서 ASG의 크기는 시간에 따라 달라짐
전체적으로 매개변수를 정의해서 ASG에서 언제든 실행할 수 있는 최소 및 최대 EC2 인스턴스의 개수를 정할 수 있음
로드 밸런서와 연결하면 ASG에 포함된 EC2 인스턴스가 로드 밸런서에 연결됨
어떤 인스턴스가 비정상이라고 여겨지면 이것을 종료하고 새 EC2 인스턴스를 만들어 대체함
무료이며 그 아래에 생성되는 EC2 인스턴스와 같은 리소스에 대해서만 비용을 내면 됨
시작 템플릿을 만들어야 함
ASG의 최소 크기, 최대 크기, 초기 용량과 스케일링 정책을 정의해야 함
CloudWatch 경보를 기반한 ASG에서 스케일 인/아웃을 할 수 있음
평균 CPU를 관찰할 수 있는 지표나 원하는 사용자 지정 좌표가 경보를 울릴 수 있음
전체 평균 CPU가 너무 높으면 인스턴스를 추가
경보를 기반으로 스케일 인/아웃 정책을 만들어 인스턴스를 늘리거나 줄일 수 있음
목표 추적
단순/단계 스케일링
예약 스케일링
예측 스케일링
애플리케이션이 수행하는 작업과 작동 방식에 따라 달라짐
인스턴스가 요청을 받을 떄마다 일반적으로 일종의 계산을 수행하기 때문
따라서 일부 CPU를 사용하게 됨
따라서 모든 인스턴스의 평균 CPU사용률을 살펴본 후 이 비율이 높아지면 인스턴스 활용도가 더 높다는 의미
EC2 인스턴스는 한 번에 타깃 별로 1000개의 요청이라는 최적의 요청으로 작동
업로드와 다운로드가 너무 많고 네트워크가 EC2 인스턴스의 병목현상이 될 것이라고 예상된다면 평균 네트워크 사용량을 기준으로 스케일링을 설정
특정 임계값에 도달했을 때 자동으로 스케일링이 이루어지거나 클라우드 와치에 설정한 사용자 정의 메트릭을 기반으로 스케일링 조정 가능
스카일링 작업이 있은 후에 인스턴스를 추가하거나 제거할 때마다 기본적으로 5분 쿨다운 시간에 들어감
쿨다운 시간 동안 ASG는 추가 인스턴스를 개시하거나 종료하지 않음
=> 메트릭이 안정화되도록 하고 새로운 인스턴스가 적용되어 새로운 메트릭이 어떻게 변할지 지켜보는 시간을 가지기 위해서
기본 쿨다운이 효과가 있는가?
효과가 있다 => 작업 무시
그렇지 않다 => 인스턴스를 시작하거나 종료하는 스케일링 작업
따라서 준비된 도구를 사용하여 EC2 인스턴스 설정 시간을 줄여 요청을 더 빠르게 처리할 수 있도록 하는 것이 좋음
EC2 인스턴스를 설정하는데 시간을 소비하지 않으면 즉시 효과가 나타날 수 있음
훨씬 더 빠르게 활성화될 수 있기 때문에 쿨다운 시간을 줄일 수 있고 ASG를 더욱 동적으로 확장 및 축소할 수 있음
생성해 둔 시작 템플릿 덕분에 전체 오토 스케일링 그룹을 업데이트 할 수 있음
이에 따라 EC2 인스턴스를 다시 생성해야 함
=> 인스턴스를 종료하고 다시 나타날 때까지 기다리는 대신 오토 스케일링의 고유 기능인 인스턴스 새로고침을 사용할 수 있음
최소값의 정상 백분율 설정 가능
=> 시간이 지나면서 삭제되는 인스턴스의 개수를 오토 스케일링 그룹에 알림
=> 인스턴스가 종료되면 새 인스턴스가 새 시작 템플릿으로 나타남
=> EC2 새로고침
EC2 인스턴스가 준비되고 트래픽을 처리할 수 있는 충분한 시간이 있는지 확인하려면 워밍업 시간을 지정할 수 있음
새 인스턴스를 사용할 준비가 될 때까지 시간을 지정할 수 있음