Scalability(확장성): 수직 확장성, 수평확장성
수직확장성: 인스턴스 크기 확장
수평확장성: 인스턴스 개수 확장+분배시스템 - scale out/in
Availability(고가용성)
애플리케이션 또는 시스템을 둘 이상의 데이터센터에서 가동중
→ 고가용성으로 데이터 손실 없이 계속해서 작동하도록
Elastic Load Balancing
: 트래픽을 서버들로 전달: 부하 분산, 장애x
aws가 업그레이드, 유지관리, 고가용성 책임짐
- Health Check: 로드밸런서가 ec2인스턴스 작동 올바르게 되는지 확인 포트와 라우터에서 진행, 200응답 아니면 트래픽 안보냄 대상 그룹 level
- ec2보안그룹을 로드밸런서 그룹으로 연결 ec2 인스턴스가 로드 밸런서에서 온 트래픽만을 허용 ‼️이거 우리가 전에 어려워했던거!! 이렇게 쓰인다고 이해하니까 완전 알겠음
- 애플리케이션 서버는 클라이언트의 IP를 직접 못봄
- 종류
- Classic Load Balancer
- Application Load Balancer
- HTTP 전용 로드밸런서 (7Layer)
- HTTP에서 HTTPS로 트래픽을 자동 리다이렉트 가능
- 다른 대상그룹에 라우팅 가능(path, hostname, query string, header) ex. 각 대상그룹마다 path에 따라 검색만. 조회만.. 다른 작업 처리 가능
- 대상그룹: ec2 instance, ecs task, Lambda function, (사설)IP addr
- 도커, ECS에 적합 - 포트 매핑 기능
- 실습:
두 인스턴스 대상그룹에 넣고 ALB만들어 새로고침 계속하면 두 ec2인스턴스로 부하 분산
하나 끄면 다른데로만 연결됨
ALB > Listener에서 요청별로 (다른 대상그룹으로 연결/다른 url로 연결/바꿔서 다른 결과 반환) 가능 : 규칙 순서대로 우선순위
- Network Load Balancer
- TCP와 UDP 트래픽 (4Layer)
- 가용 영역별로 하나의 고정 IP
⭐️1~3개의 IP로만 액세스할 수 있는 애플리케이션을 만들라 →NLB
- 대상그룹: ec2 instance, private IP addr, ALB
- Health Check - TCP, HTTP, HTTPs
- Gateway Load Balancer
- 네트워크 계층 3Layer
- 배포 및 확장과 AWS의 타사 네트워크 가상 어플라이언스의 플릿 관리에 사용
- 애플리케이션에 도달하기 전에 모든 트래픽 검사 - 방화벽, 침입탐지에 강함
- 기능: 투명 네트워크 게이트웨이 / 로드밸런서
- ⭐️6081번 포트의 GENEVE 프로토콜을 사용 =GWLB
- 대상그룹: EC2 instance, private IP addr
⭐️Sticky Sessions (Session Affinity)
특정 세션의 요청을 처음 처리한 서버로만 전송하는 것- 쿠키 사용
CLB, ALB 대상그룹에 설정하는 옵션
쿠키:
Application-based Cookies
대상으로 생성된 사용자 정의 쿠키 (애플리케이션에 필요한 모든 사용자 정의 속성을 포함)
Duration-based Cookies
로드밸런서에서 생성한 기간 기반으로 만료됨
ALB에서 이름 - AWSALB
CLB에서 이름 - AWSELB
Cross-Zone Load Balancing
가용영역에 상관없이 모든 인스턴스에 부하를 고르게 분배
아니라면) az에게 고르게 분배, 각 az안에서 인스턴스들에 분배
CLB, ALB에서 default 활성화, 데이터를 다른 az로 옮길때 비용X
NLB, NWLB는 비활성화, 비용O
SSL/TLS 암호화 기반 인터넷 보안 프로토콜
SSL(보안 소켓 계층): 클라이언트와 로드 밸런서 사이에서 트래픽이 이동하는 동안 암호화(=in-flight 암호화), 송신자와 수신자 측에서만 복호화
TLS(전송 소켓 계층):새로운 버전의 SSL - 요즘 씀 걍 SSL이라부름
Public SSL 인증서는 인증기관CA에서 발급. 주기적으로 갱신.
HTTPs의 s가 SSL 인증서 써서 암호화해 안전하다는 의미
ACM - AWS 인증서 관리자
- Server Name Indication (SNI) 서버 이름 표시 여러 개의 SSL 인증서를 하나의 웹 서버에 로드해 하나의 웹 서버가 여러 개의 웹 사이트 지원하도록 함 즉, 단일 IP주소에서 여러 SSL 인증서를 호스팅할수있도록 도와줌 클라이언트가 대상 서버의 호스트 이름을 지정 → 서버가 어떤 인증서 로드할지 알게됨 ALB, NLB만
⭐️Connection Draining (Deregistration Delay)
인스턴스가 등록 취소 또는 비정상적인 상태일 때 인스턴스에 어느 정도의 시간을 주어 in-flight 요청을 완료할 수 있도록 만들어 주는 기능
연결이 draining 되면, 즉 인스턴스가 draining 되면 ELB는 등록 취소 중인 인스턴스로는 새로운 요청을 보내지 않게 된다.(새로운 요청은 shut down)
업로드와 같이 오래 걸리는 작업인 경우 파라미터를 높게 설정해 인스턴스 장애 복구 등의 작업을 진행
Auto Scaling Group
ASG를 통해 scale-out/scale-in
로드밸런서와 패어링하면 자동으로 모든 ec2인스턴스가 로드밸런서에 연결
인스턴스 비정상이면 종료하고 대체할 ec2인스턴스 생성
Min 용량/Max 용량/desired 용량, Lanch Template 설정
CloudWatch가 Auto Scaling Alarms
Scaling Policies
- Target Tracking Scaling - ex. 평균 CPU 설정
- Simple / Step Scaling -CloudWatch 알림 생성할때 인스턴스 생성 제거 조건 설정
- Scheduled Actions - 시간별 사용패턴 기준으로 scaling 여부 예측
- Predictive Scaling- 지속적으로 부하를 예측하고 이를 통해 다음 스케일링을 예측
스케일링의 지표
- CPUUtilization - 평균 CPU 사용량
- RequestCountPerTarget - 인스턴스 당 요청의 수
- Average Network In / Out
- 커스텀 지표
⭐️Scaling Cooldowns
- 스케일링 발생 후 휴지 기간 가짐
- 휴지기간동안 추가 인스턴스 실행/종료 불가
용어 정리
** Elastic Load Balancing
종류
- Classic Load Balancer
- Application Load Balancer
- Network Load Balancer
- Gateway Load Balancer
설정
Sticky Sessions (Session Affinity)
Cross-Zone Load Balancing
Connection Draining (Deregistration Delay)
SSL/TLS
로드밸런서랑 SSL이랑 뭔상관!
로드밸런서로 SSL 적용
SSL이 적용된 로드밸런서에서의 호스트 기반 라우팅 동작 방식
Network Load Balancer, 이제 서버 이름 표시(SNI)를 사용하여 여러 TLS 인증서 지원
Auto Scaling Group에 로드밸런서를 연결