AWS Solution Architect - Associate - ELB & ASG
확장성 & 고가용성
- 확장성
- 더 큰 부하를 핸들링 할 수 있다는 뜻
- 수직적 확장
- 수평적 확장 (elasticity)
- 고가용성과 연결되어있지만 다름
수직적 확장
- 인스턴스의 크기 확장
- 데이터베이스같은 비분산 시스템에서 흔하게 일어남
- RDS, Elasticache
- 하드웨어의 리밋이 있음
수평적 확장
- 인스턴스, 시스템 수를 증가시킨다는 듯
- 분산시스템
고가용성
- 시스템을 2개 이상의 데이터센터(AZ)에서 사용한다는 뜻
- 센터 하나가 다운되도 유지되도록 하는 것
부하분산
- ec2 인스턴스같은 다수의 서버에 트래픽을 전달하는 것
- 어플리케이션의 단일 액세스 지점을 노출시킴
- 다운스트림 인스턴스의 실패를 처리하기 쉬움
- 상태 확인 매커니즘을 가지고 있고 어떤 인스턴스로 트래픽을 보낼수 없는지 알 수 있음
- SSL 종료 제공
- 쿠키를 통해 보안 강화
- 고가용성
ELB
- EC2. EC2 auto scaling group, ecs 등 많은 서비스와 연결되어있음
- health checks
- http
- 4567
- /health
- Classic Load Balancer
- 구형 (시험에는 더이상 나오지 않음)
- http, https, tcp, ssl
- Application Load Balancer
- 신형
- HTTP, HTTPS, WebSocket
- Network Load Balancer
- TCP, TLS, UDP
- Gateway Load Balancer
- Operates at layer 3(Network layer) - IP PRotocol
Application Load Balancer
- 7계층 (HTTP) LB
- 다수의 인스턴스에 부하분산을 해줌
- 같은 인스턴스에 다양한 application에 로드밸런싱
- HTTP/2, websocket 지원
- redirect 지원 (http -> https)
- 다른 타겟 그룹에 라우팅
- URL path 베이스 routing
- example.com/users & example.com/posts
- hostname 베이스 라우팅
- query string, headers 베이스 라우팅
- 마이크로서비스, 컨테이너 베이스 어플리케이션에 알맞음
- Docker, Amazon ECS
- ECS인스턴스에서 동적 포트로 redirection 할 수 있음.
- TargetGroup
- EC2 instances
- ECS tasks
- Lambda functions
- IP Addresses
Network Load Balancer
- 4계층 LB
- TCP, UDP 트래픽
- 초당 수백만개의 요청을 처리할 수 있음 -> 매우 높은 성능
- ALB에 비해 매우 짧은 대기시간
- AZ 하나당 하나의 고정IP를 가짐
- Elastic IP 를 할당 하여 특정 IP의 화이트리스트를 만들 수 있음.
- ALB와 비슷하게 동작함
- Target Group
- EC2 Instances
- IP Address
- Application Load Balancer
- NLB를 통해 고정 IP를 얻고 ALB를 통해 HTTP 타입의 트래픽과 관련된 모든 규칙을 얻을 수 있음.
- Health Check은 TCP, HTTP, HTTPS 3가지 프로토콜을 지원함
Gateway Load Balancer
- 배포, 스케일링, 써드파티 가상 머신 등의 관리를 위함
- 방화벽, 침입 감지 및 방지 시스템, 딥 패킷검사, 네트워크 레벨의 페이로드 수정 등을 함
- 네트워크 트래픽 분석 등을 할 수 있음
- 3계층(Network layer) LB - IP Packets
- 투명한 네트워크 게이트웨이
- 모든 트래픽이 단일 입구, 단일 출구를 통한다.
- 로드밸런서
- 가상 어플라이언스 세트와 타깃 그룹에 트래픽을 분산함
- 6081포트에서 GENEVE 프로토콜을 이용함
- Target Group
- EC2 Instances
Sticky Session (Session Affinity
- 같은 사용자가 로드밸런서에 요청하면 항상 똑같은 인스턴스에 리다이렉트 됨.
- CLB(Classic), ALB, NLB에서 작동함
- 쿠키를 사용함 (NLB는 쿠키 사용하지 않음.)
- 만료기간을 설정할 수 있음
- 예를들어, 유저가 세션데이터를 잃지않게 할 수 있음.
- 하지만 인스턴스들간의 부하 균형이 맞지 않을 수 있음.
- 쿠키
- Application-based Cookie
- Custom Cookie
- 응용프로그램 자체에서 생긴 쿠키
- 앱이 요구하는 사용자 지정 특성을 포함할 수 있음
- 쿠키 이름은 각 타깃 그룹에 개별적으로 지정되어야함. (특정되어야함)
- 쿠키이름: AWSALB, AWSALBAPP, AWSALBTG 는 사용하지 못함
- Application Cookie
- 로드밸런서에서 생긴 쿠키
- 쿠키이름: AWSALBAPP
- Duration-based Cookie
- 로드밸런서에서 생긴 쿠키
- 쿠키이름: AWSALB (ALB), AWSELB (CLB)
Cross Zone Load Balancing
- 모든 AZ에 고르게 분산됨
- 어떤 AZ에 몇개가 있든 고르게 분산되기 때문에
- AZ1에 50퍼, AZ2에 50퍼가 분산된다고 하더라도 AZ1에 2개가 있고 AZ2에 8개가 있다면 각 인스턴스에 10퍼센트씩 분산됨
- 쓰지않으면 AZ1에 50퍼, AZ2에 50퍼가 분산되면 AZ1 2개 인스턴스에 25퍼씩, 나머지는 6.25퍼씩 나눠가짐
- ALB
- Default로 가능함. (끌 수 있음)
- 다른 AZ로 데이터 이동이 일어나도 요금 부과 x
- NLB, GLB
- Default가 불가능
- CLB
- Default가 불가능
SSL / TLS
- SSL 인증은 클라이언트와 로드밸런서 사이의 트래픽이 이동중 암호화가 되도록 해줌
- SSL은 Socket Secure Layer 이며 연결암호화에 이용됨
- TLS는 SSL의 새로운 버전, Transport Layer Security
- TLS를 쓰고있지만 아직도 SSL이라고 부름
- SSL은 갱신되어야함
- 유저는 요청할때 로드밸런서와 https로 통신한 후 로드밸런서는 해당 트래픽을 vpc에서 http로 ec2와 통신하게됨
SNI
- 하나의 웹서버가 여러개의 웹사이트를 처리할 때 하나의 웹서버에서 다수의 SSL을 로드해야함.
- 새로운 프로토콜에서는 SSL handshake단계에서 클라이언트가 대상 서버의 호스트명을 표시해야함.
- ALB, NLB, CloudFront에서 동작함
- CLB
- 하나의 SSL 인증만 지원함
- 여러개의 SSL 인증을 하려면 여러개의 CLB를 써야함
- ALB
- 여러개의 SSL 인증 지원
- NLB
- 여러개의 SSL 인증 지원
Connection Draining
- Connection Draining - CLB
- Deregistration Delay - ALB & NLB
- ec2가 종료될 때 draining모드로 들어감 기존유저의 연결이 끝날때까지는 기다림, 그 외 다른 사용자들은 해당 ec2가 아닌 다른 ec2로 연결해줌
- 1 ~ 3600초로 시간을 둘 수 있음 (deafult: 300초)
- 0초로 두면 disabled
- request가 짧다면 낮은 시간으로 두는게 좋음
- 인스턴스를 빠르게 뺄 수 있음
Auto Scailing Group
- 스케일 아웃 (EC2 추가) & 인 (EC2 제거)
- unhealthy 상태의 인스턴스를 재생성함
- 로드밸런서에 자동으로 등록함
- ec2 인스턴스 비용만 지불한다면 무료임
- 최소 인스턴스 수, 원하는 인스턴스 수, 최대 인스턴스 수를 정할 수 있다.
- ELB가 unhealthy를 ASG에 전달하면 ASG가 해당 인스턴스를 종료함
- Launch Template
- AMI + Instance Type
- EC2 User Data
- EBS Volumes
- Security Groups
- SSH Key Pair
- IAM Roles for EC2 Instances
- Network + Subnet Information
- Load Balancer Information
- ...
- Scailing Policy
- CloudWatch 알람에 의해 scale out 될 수 있음
- Dynamic Scailing Policy
- Target Tracking Scailing
- ex) CPU 사용률 40퍼에 머물도록 하고싶다
- Simple/Step Scailing
- CloudWatch에서 임계치를 정하고 해당 임계치가 넘으면 얼마 추가한다
- CloudWatch에서 임계치를 정하고 해당 임계치가 넘지 않으면 얼마 제거한다
- Scheduled Action
- 언제 얼만큼 늘릴지
- Predictive Scailing
- 이전의 부하를 보고 앞으로 일어날 부하를 예측하는것
- 좋은 scailing 기준
- CPU Utilization - 평균 CPU 사용량
- RequestCountPerTarget - 타겟당 요청수
- Average Network I/O
- CloudWatch를 이요한 커스텀 매트릭
- Scailing CoolDown
- 스케일링 후 cooldown period (default 300초)