SMALL
1. 확장성(Scalability) & 고가용성(High Availability)
- Scalability(확장성)
- 애플리케이션 / 시스템이 조정을 통해 더 많은 양을 처리할 수 있는 능력
- Vertical Scalability(수직 확장성)
- 인스턴스의 크기를 늘리는 것 (사양 업그레이드)
- 분산되지 않은 데이터베이스 같은 시스템에 적합 (RDS, elasticCache)
- 하드웨어적 한계가 있음
- scale up / scale down
- Horizontal Scalability(수평 확장성) = elasticity(탄력성)
- 인스턴스 혹은 시스템의 개수를 늘리는 것
- 수평확장을 하는 것은 분산 시스템이 있다는 것을 의미 (웹이나 현대 애플리케이션은 대부분 분산시스템으로 이루어짐)
- Amazon EC2와 같은 클라우드 제공 업체로 쉽게 수평 확장 가능
- High Availability(고가용성)
- 수평 확장과 함꼐 사용되는 개념
- 애플리케이션 또는 시스템을 적어도 둘 이상의 AWS AZ나 데이터 센터에서 가동중인 것을 의미
- 데이터 센터에서의 손실에서 살아남는 것이 목표, 하나가 멈춰도 나머지가 가동하여 대비하는 것
- Auto Scaling Group multi AZ or Load Balancer multi AZ를 이용
- 고가용성은 수동적일 수 있음 ex) RDS Multi AZ
- 고가용성은 능종적일 수 있음 ex) 수평 확장
2. Load Balancing
- 서버 혹은 서버 집합으로 트래픽을 백이나 다운스트림 EC2로 전달하는 역할
- 사용 목적
- 트래픽 분산
- 앱에 단일 접근 포인트 DNS를 통해 노출 가능
- 정기적인 health check를 통하여 하위 인스턴스틔 실패에 대처 가능
- 웹사이트에 SSL termination(HTTPS)를 제공 - 암호화된 https 트래픽을 가질 수 있음
- 쿠키를 통해 정적 분배 적용
- 가용영역 내 고가용성을 가짐
- 클라우드 내에서 private traffic과 public traffic을 분리할 수 있음
- ELB(Elastic Load Balancer) 사용 목적
- ELB(Elastic Load Balancer): 관리형 로드 밸런서
- 애플리케이션에 사용 가능한 정적 DNS 이름을 제공
- AWS가 관리, 어떠한 경우에도 로드 밸런서가 작동할 것을 보장
- AWS는 업그레이드, 유지 관리 및 고가용성을 책임짐
- AWS는 몇가지 구성 놉(configuration knbs)을 제공
- 다수의 AWS 서비스와 통합 (EC2, EC2 auto scailing, ECS, ACM, CloudWatch, Route53, WAF, WAS Global Accelerator)
- ELB(Elastic Load Balancer): 관리형 로드 밸런서
- Health Check
- ELB가 EC2의 올바른 작동을 확인하고 비정상적이면 트래픽을 중단
- 포트와 라우트로 점검
- Protocal: Http
- Port: 4567
- EndPoint: /health
- 응답이 200이 아닐 경우 비정상으로 판단
- AWS Load Balancer의 종류
CLB: Classic Load Balancer (v1 - old generation) - 2009더이상 사용되지 않음- ALB: Application Load Balancer (v2 - new generation) - 2016
- Layer 7, http 전용 로드 밸런서
- 여러 머신간 다수 http 애플리케이션 라우팅에 사용
- 동일 EC2 인스턴스 상의 여러 애플리케이션에 대한 로드 밸런싱 ex) containers
- http/2와 WebSocket 지원
- redirection 지원 (http => https)
- 대상 그룹(target groups)
- EC2 instances(Auto Scailing Group에 의해 관리) - HTTP
- ECS Tasks(ECS 자체에 의한 관리) - HTTP
- Lambda functions - HTTP 용청이 JSON 이벤트로 번역
- IP address - Private IP이여야 함
- 대상 그룹(target groups)에 따른 라우팅
- URL 경로 기반 (test.com/test1 , test.com/test2)
- URL 호스트 기반 (test1.test.com , test2.test.com)
- 쿼리스트링, 헤더 기반 (test.com?name=test&age=20)
- 마이크로 서비스나 컨테이너 기반 애플리케이션에 가장 적합 ex) Docker, Amazon ECS
- ECS의 동적 포트로 리디렉션하는 포트 매핑 기능이 있음
- ALB는 여러 대상 그룹으로 라우팅할 수 있으며, 헬스 체크는 대상 그룹 수준에서 이루어짐
- Query String / Parameter Routing
- 고정된 호스트 이름 사용 (XXX.region.elb.amazonaws.com)
- 애플리케이션 서버는 클라이언트의 IP를 직접적으로 보지 못함
- 실제 IP는 Header X-Forwarded-For에 삽입
- 포트(X-Forwarded-Port)와 프로토콜(X-Forwarded-Proto)도 확인 가능
- NLB: Network Load Balancer (v2 - new generation) - 2017
- Layer 4, TCP, UDP를 다룰 수 있는 로드 밸런서, HTTP를 다루는 L7의 하위 계층
- 고성능 (초당 수백만건의 요청 처리 가능), ALB에 비해 지연 시간이 짧음(약 100 ms / ALB는 400 ms)
- 가용 영역당 하나의 고정 IP를 가짐
- 탄력적 IP를 각 가용 영역에 할당 가능 (helpful for whitelisting specific IP)
- AWS 프리 티어에 포함 X
- 대상 그룹(target groups)
- EC2 instances (TCP 또는 UDP 트래픽을 EC2 인스턴스로 리다이렉트 가능)
- IP 주소 (하드코딩된 private IP)
- Application Load Balancer (고유 IP를 얻을 수 있고 ALB 덕분에 HTTP 유형의 트래픽 또한 처리할 수 있기에 유효한 설정)
- Health check: TCP / HTTP / HTTPS 중 하나의 프로토콜로 헬스 체크 제공
- 보안 그룹 정의 X, NLB로 들어온 트래픽이 EC2 인스턴스로 들어가기 때문에 EC2의 보안그룹이 결정
- GWLB: Gateway Load Balancer - 2020
- 배포 및 확장과 AWS의 3rd party 네트워크 가상 어플라이언스의 플릿 관리를 위해 사용
- 방화벽, 침입 탐지 및 방지 시스템, 딥 패킷 검사 시스템, 페이로드의 조작 등
- user -> gwlb -> 타사 대상 그룹의 가상 어플라이언스 -> gwlb -> app
- app 에 도달하기 전 트래픽을 검사하고 drop or 전달
- L7보다 낮은 단계인 네트워크 계층(L3) 단계에서 실행 - IP 패킷의 네트워크 계층
- Transparent Network Gateway: 모든 트래픽에 대해 단일 입/출구를 가지고 검사
- Load Balancer: 가상 어플라이언스에 대해 트래픽 분산
- 6081 포트에서 GENEVE 프로토콜 사용
- 대상 그룹(target groups)
- EC2 Instances
- IP 주소(개인 IP를 수동 등록, private IP)
- Load Balancer의 보안 그룹
- HTTP 80 기본 포트와 HTTPS 443 기본 포트를 열어놓고 EC2의 보안 그룹은 이를 상속해야 Load Balancer에서 온 입력만을 들여보내는 강화된 보안 매커니즘이 작용됨
Sticky Sessions(Session affinity) in ELB - 고정 세션 혹은 세션 밀접성
- 로드 밸런서에 두가지 요청을 수행하는 클라이언트가 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것
- 로드 밸런서 뒤에 있는 동일한 인스턴스로 항상 리디렉션 되도록 고정 세션을 구현할 수 있음
- 유저 1이 ALB를 거칠 때 몇번이고 같은 인스턴스로 통신하게 되는 것
- CLB, ALB에서 사용 가능
- 쿠키를 통하여 고정성(Stickiness)이 가능하고 만료 기간이 있음
- 유저가 세션 데이터를 잃으면 안될 때 사용
- Sticiness 활성화 시 백앤드 EC2 인스턴스에서 트래픽 불균형이 생길 수 있음
- Cookie
- Application-Based Cookies
- Custom Cookie
- 사용자 정의 쿠키(앱에서 생성), 만료 기간 설정 가능
- 앱에 필요한 모든 사용자 정의 속성 포함 가능
- 쿠키 이름은 각 대상 그룹별로 개별적으로 지정 가능
- AWSALB, AWSALBAPP, AWSALBTG같은 이름을 쓰면 안됨(ELB에서 예약됐으므로)
- Application Cookie
- 로드밸런서로부터 생성
- ALB의 쿠키 이름은 AWSALBAPP
- Custom Cookie
- Duration-Based Cookies
- 로드밸런서로부터 생성, 특정 기간을 기반으로 만료, 그 기간은 로드밸런서에 의해 생성
- 쿠키 이름은 ALB에서는 AWSALB, CLB에서는 AWSELB 사용
- Application-Based Cookies
- 로드 밸런서에 두가지 요청을 수행하는 클라이언트가 요청에 응답하기 위해 백엔드에 동일한 인스턴스를 갖는 것
Cross-Zone Load Balancing
- with Cross-Zone Load Balancing
- 각 AZ에 ALB의 내부 인스턴스 개수가 불균형한 경우 모든 인스턴스에 고르게 부하를 분배
- abl1(인스턴스 2), alb2(인스턴스 8)에 부하가 10일 경우 각 인스턴스가 10%씩 부하를 분배
- without Cross-Zone Load Balancing
- AZ 영역을 교차하지 않고 요청을 분산
- abl1(인스턴스 2), alb2(인스턴스 8)에 부하가 10일 경우 alb1과 alb2에 50%씩 부하를 분배하고 alb1의 인스턴스는 25%씩, alb2의 인스턴스는 6.25%식 부하 분배
- Application Load Balancer
- 대상 그룹 레벨에서 비활성화 가능, default는 활성화 상태
- 가용 영역 간 데이터에 대한 요금 X
- Network Load Balancer & Gateway Load Balancer
- default 비활성화
- 활성화 시 가용 영역간 데이터에 대한 요금 청구
- Classic Load Balancer
- default 비활성화
- 활성화 시 가용 영역간 데이터에 대한 요금 X
- with Cross-Zone Load Balancing
SSL/TLS 인증서
- SSL 인증서: 클라이언트와 로드밸런서 사이에서 트래픽이 이동하는 동안 암호화 (in-flight 암호화 / 전송중 암호화)
- SSL(Secure Socket Layer) 보안 소켓 계층을 의미, 연결 암호화 시 사용
- TLS(Transport Layer Security)는 SSL의 신버전
- Public SSL은 Certificate authorities(CA)에서 발급
- 인증기관: Comodo, Symantec, GoDaddy 등,,,
- 로드밸런서에 추가 시 클라이언트와 LB 사이의 연결 암호화
- 만료기간이 있어 주기적으로 갱신하여 인증 상태를 유지해야 함
- 동작 방식
- user가 https 통신을 통하여 로드 밸런서 접근
- ssl termination (ssl 종료)
- LB가 HTTP 통신을 통해 백엔드와 통신 수행(내부 VPC망은 private하기 때문에 HTTP도 안전)
- 특징
- LB는 X.509 인증서를 이용, 이를 SSL 혹은 TLS 서버 인증서라 부름
- 인증서를 ACM(AWS Certificate Manager)에 업로드 할 수 있음
- HTTPS 리스너를 이용해야하고 default 인증서를 지정해야함
- 다중 도메인을 위해 다른 인증서를 추가할 수도 있음
SNI(Server Name Indication)
- 중대한 문제의 해결책, 여러개의 SSL 인증서를 하나의 웹서버에 로드해 하나의 웹서버가 여러개의 웹서버를 지원할 수 있게 함
- 확장된 프로토콜로 클라이언트가 대상 서버의 호스트 이름을 지정하는데, 이는 최초 SSL 핸드쉐이크 시 일어남
- 클라이언트가 접속할 웹사이트를 말햇을 때 서버는 어떤 인증서를 로드해야하는지 알 수 있는 것
- ALB, NLB, CloudFront에서만 동작
- 지원 항목
- CLB: 1개의 SSL 인증서만 지원
- ALB & NLB: SNI를 사용하여 여러개의 인증서로 여러개의 리스너를 둘 수 있음
ELB Connection Draining
- CLB: Connection Draining
- ALB & NLB: Deregistration Delay
- 인스턴스가 등록 해제 되거나 unhealth 할 때 in-flight 활성 요청 을 처리할 시간을 주는 것
- 드레이닝 중인 EC2에는 트래픽을 보내지 않는다. 이미 연결된 유저는 기존 연결 및 요청이 마무리 될때까지 충분한 드레이닝 시간을 가지고 완료된 뒹 드레이닝 된다.
- 드레이닝 시간을 설정할 수 있으며, default 300, 0으로 설정 시 draining 사용 X
ASG(Auto Scaling Group)
- 웹사이트나 애플리케이션의 부하가 변경되었을 때 사용자는 AWS에서 서버를 빠르게 생성하고 종료가능, 이를 자동화하기 위하여 ASG 사용
- 무료이지만 EC2 인스턴스와 같은 하위 리소스에 대한 비용만 지불
- 목표
- 부하 증가에 따른 EC2 scale out
- 부하 감소에 따른 EC2 scale in
- 최소 및 최대 실행중인 EC2 인스턴스 보장
- 새로운 인스턴스를 로드밸런서에 자동 등록
- 인스턴스가 unhealth한 경우 대체할 새 EC2 인스턴스 등록
- ASG 속성
- Launch Template
- AMI + InstanceType
- EC2 User Data
- EBS Volumes
- Security Groups
- SSH Key Pair
- IAM Roles for your EC2 Instances
- Network + Subnets Information
- Load Balancer Information
- min size / max site / initial capacity
- scaling policies
- Launch Template
- CloutWatch Alarms & Scaling
- ASG를 CloudWatch 경보에 기반하여 스케일 인 아웃 가능
- 경보는 지표(평균 CPU, 사용자 지정 지표 - custom metric)를 모니터링
- 평균 CPU와 같은 지표는 전체 ASG 인스턴스에 대해 계산
- Auto Scaling Polices
- Dynamic Scaling Policies(동적 조정)
- Target Tracking Scaling(대상 추적 크기 조정)
- 가장 간단하고 쉽게 설정할 수 있는 방법 ex) 평균 ASG CPU가 약 40% 대에 유지되도록 함
- Simple / Step Scaling(단계 크기 조정)
- CloudWatch 경보가 트리거될 때 ex) cpu > 70%일 경우 2 유닛 추가, cpu < 30%일 경우 1유닛 제거
- Scheduled Actions(예약된 크기 조정)
- 알려진 사용 패턴에 기반하여 스케일링 에상 ex) 매주 금요일 오후 5시에 최소 용량을 10으로 증가
- Predictive Scaling(예측 조정)
- 과거 히스토리에서 로드를 분석하고 예측한 뒤 해당 예측에 따라 scaling
- Target Tracking Scaling(대상 추적 크기 조정)
- 스케일링에 사용하기 좋은 평가 지표
- CPU Utilization : 인스턴스 전반에 걸친 평균 CPU 사용률
- Request Count Per Target: EC2 인스턴스당 요청 수가 안정적인지 확인하기 위해 사용
- AVG Network In/Out: 평균 네트워크 입출력량
- Any Custom Metric: CloudWatch를 통한 지표로 확인
- Dynamic Scaling Policies(동적 조정)
- Scaling Cooldown
- 스케일링이 발생한 후 쿨 다운기간에 진입(default 300 sec)
- 쿨다운 기간에는 ASG 추가 인스턴스를 실행 또는 종료할 수 없음
- 즉시 사용이 가능한 AMI를 사용하여 EC2 인스턴스 구성 시간을 단축하고 이를 통해 요청을 신속하게 처리하는 것이 좋음
LIST
'develop > AWS' 카테고리의 다른 글
[SAA] Route 53 (0) | 2024.04.26 |
---|---|
[SAA] RDS, Aurora, ElastiCache (1) | 2024.04.24 |
[SAA] EC2 Instance Storage (EBS, AMI, Amazon EFS) (1) | 2024.04.19 |
[SAA] Amazon EC2 (Amazon Elastic Compute Cloud) - 2 (2) | 2024.04.18 |
[SAA] Amazon EC2 (Amazon Elastic Compute Cloud) (0) | 2024.04.17 |