분산 시스템의 기본 Scalability vs Availability
[1] Scalability (확장성)
Scalability는 시스템이 사용자 수, 데이터 양, 처리량이 증가하거나 감소할 때, 성능과 처리 능력을 유지하거나 향상시키는 능력을 말합니다.
즉, **"얼마나 잘 확장할 수 있는가?"**를 측정하는 지표입니다.
Scalability의 주요 특징
- 확장 방식
- 수평 확장 (Horizontal Scaling):
더 많은 서버나 인스턴스를 추가하여 확장.
예: EC2 인스턴스를 추가하여 부하 분산. - 수직 확장 (Vertical Scaling):
기존 서버의 리소스(CPU, RAM 등)를 업그레이드.
예: 더 높은 사양의 EC2 인스턴스로 교체.
- 수평 확장 (Horizontal Scaling):
- 목표
- 높은 처리량과 성능 유지.
- 사용자 증가, 데이터 처리량 증가에 따라 유연하게 대처.
- 중요한 설계 요소
- 무중단 확장 지원.
- 부하 분산(Load Balancer)과 자동 확장(Auto Scaling) 설정.
예시
- Scalability가 뛰어난 시스템:
전자상거래 사이트가 트래픽 급증(블랙프라이데이 등)에도 서버를 추가해 안정적으로 작동. - AWS 서비스: Auto Scaling, DynamoDB의 확장성 등.
[2] Availability (가용성)
Availability는 시스템이 항상 정상적으로 작동하며, 사용 가능한 상태를 유지하는 능력을 의미합니다.
즉, **"서비스가 항상 사용 가능하게 유지되는가?"**를 측정하는 지표입니다.
Availability의 주요 특징
- 주요 목표
- 서비스가 중단되지 않고 사용 가능한 상태를 유지.
- 사용자 요청에 대해 항상 응답 가능.
- 중요한 설계 요소
- 장애 복구(Recovery): 장애 발생 시 빠르게 복구.
예: 장애가 난 인스턴스를 자동으로 교체. - 중복 구성(Redundancy): 중요한 시스템은 여러 복사본을 유지.
예: 여러 AZ(가용 영역)에서 서버 실행. - 무중단 배포: 서비스 중단 없이 업데이트 적용.
- 장애 복구(Recovery): 장애 발생 시 빠르게 복구.
- Availability의 측정
- **Uptime(가동 시간)**으로 측정.
예: 99.9% 가용성은 1년 동안 약 8시간 45분의 다운타임 허용.
- **Uptime(가동 시간)**으로 측정.
예시
- Availability가 높은 시스템:
금융 서비스가 24/7로 항상 거래 가능. - AWS 서비스: Multi-AZ RDS, ELB(Elastic Load Balancer)로 부하 분산.
Scalability와 Availability의 차이점
Scalability (확장성) | Availability (가용성) | |
정의 | 시스템의 처리 능력을 유지하거나 확장하는 능력. | 시스템이 항상 정상 작동하며 사용 가능한 상태를 유지하는 능력. |
목표 | 증가하는 부하(사용자, 데이터 등)에 유연하게 대응. | 서비스 중단 없이 항상 작동 가능. |
초점 | 성능과 처리량 유지 또는 향상. | 안정성과 중단 없는 서비스 제공. |
주요 설계 요소 | 부하 분산, 자동 확장(Auto Scaling), 데이터 파티셔닝. | 장애 복구, 중복 구성, 무중단 배포. |
예시 | 트래픽 증가 시 인스턴스 추가로 대응. | 장애가 발생해도 빠르게 복구하여 사용자에게 영향을 최소화. |
Scalability와 Availability의 관계
- Scalability는 Availability를 지원:
트래픽 증가에 대응하지 못하면 서비스가 중단될 수 있으므로 확장성이 가용성을 높이는 데 도움. - Availability는 Scalability를 필요로 함:
가용성을 유지하려면 트래픽 증가 시 확장이 가능해야 함.
추가적인 고려 사항
- Trade-off
- Scalability와 Availability를 동시에 극대화하기 어렵기 때문에 우선순위를 설정해야 함.
예: 초기에 가용성보다는 확장성에 초점을 맞출 수 있음.
- Scalability와 Availability를 동시에 극대화하기 어렵기 때문에 우선순위를 설정해야 함.
- AWS에서의 구현
- Scalability:
- Auto Scaling으로 EC2 인스턴스 수 조절.
- DynamoDB의 읽기/쓰기 용량 자동 조정.
- Availability:
- ELB로 다중 인스턴스에 부하 분산.
- Multi-AZ RDS로 장애 복구 및 중단 방지.
- Scalability:
- 실제 사례
- Netflix:
- Scalability: 글로벌 사용자 증가에 맞춰 서버를 확장.
- Availability: 장애 발생 시에도 스트리밍 서비스가 끊기지 않도록 설계.
- Netflix:
쉽게 이해하기
- Scalability는 "더 많은 손님을 받을 수 있는 큰 식당"을 만드는 것.
- Availability는 "식당이 항상 열려 있고 손님이 들어올 수 있는 상태"를 유지하는 것.
ELB (Elastic Load Balancer)
📌 **ELB (Elastic Load Balancer)**는 AWS에서 제공하는 트래픽 분산 서비스로, 애플리케이션의 가용성과 확장성을 높이는 역할을 합니다.
- ELB는 들어오는 요청(HTTP, HTTPS, TCP 등)을 여러 EC2 인스턴스나 컨테이너로 자동으로 균등하게 분배합니다.
쉽게 말해, 서버 앞에서 교통 정리를 해주는 신호등 같은 역할을 합니다. 🚦
ELB의 주요 특징
- 트래픽 분산
- 사용자 요청을 여러 서버로 분산하여 트래픽 부하를 줄이고 성능을 최적화.
- 고가용성 지원
- 서버 중 일부가 다운되더라도 정상 작동하는 서버로 트래픽을 전달하여 서비스 중단 방지.
- 확장성
- 서버 수가 늘어나거나 줄어드는 상황에서도 자동으로 적응 가능.
- 자동 상태 검사
- 연결된 인스턴스(서버)의 상태를 지속적으로 모니터링하여 정상적인 인스턴스에만 트래픽 전달.
- HTTPS/TLS 지원
- 암호화된 트래픽(HTTPS)을 처리하여 보안을 강화.
ELB의 유형
AWS에서는 애플리케이션과 트래픽 유형에 따라 4가지 ELB 유형을 제공합니다.
특징 | 사용 사례 | |
ALB (Application Load Balancer) | - HTTP/HTTPS 트래픽 분산. - URL, 호스트 이름 기반의 정교한 라우팅 지원. - OSI 모델 7계층에서 동작 - 컨테이너화된 애플리케이션과 연동하여 사용 가능 |
웹 애플리케이션, REST API 등. |
NLB (Network Load Balancer) | - TCP/UDP 트래픽 분산. - 매우 낮은 지연 시간과 고속 성능 제공. - OSI 모델 4계층에서 동작 |
실시간 애플리케이션, 게임 서버, IoT. |
CLB (Classic Load Balancer) | - 초창기 ELB. - HTTP/HTTPS, TCP/UDP 트래픽을 처리 - OSI 모델 4~7계층에서 동작 - 초창기 모델인 만큼 잘 사용 안한다. |
단순한 트래픽 분산 작업(구형 서비스에 주로 사용). |
Gateway Load Balancer | - 네트워크 트래픽을 특정 보안 장치(방화벽, IDS/IPS 등)로 라우팅. | 보안 애플리케이션 트래픽 관리. |
ELB의 주요 사용 사례
- 트래픽 부하 분산
- 웹 서버 또는 애플리케이션 서버 간 요청을 분산하여 성능 최적화.
- 서비스 중단 방지
- 서버 장애 발생 시 정상 상태의 서버로 트래픽을 자동 전달.
- HTTPS 지원
- SSL/TLS 인증서를 로드 밸런서에 설치해 보안 트래픽 처리.
- 자동 확장(Auto Scaling)과 결합
- 서버가 추가되거나 삭제될 때 자동으로 인스턴스를 로드 밸런서에 등록.
ELB의 주요 구성 요소
- 리스너 (Listener)
- 로드 밸런서가 들어오는 요청을 수신하는 구성 요소.
- 프로토콜과 포트 번호(예: HTTP:80, HTTPS:443)를 설정.
- 대상 그룹 (Target Group)
- 트래픽이 분배될 EC2 인스턴스, 컨테이너, 또는 IP 주소의 집합.
- 상태 검사 (Health Check)
- 대상의 상태를 주기적으로 확인하여, 정상 상태인 대상에만 트래픽 전달.
ELB의 장단점
장점 | 단점 |
고가용성 제공: 서버 장애 시 자동 대응 | 초기 설정이 복잡할 수 있음. |
확장성 지원: 증가하는 트래픽에 자동 대응 | 트래픽 분산 정책에 따라 추가 비용 발생 가능. |
보안 강화: HTTPS/TLS 트래픽 지원 | 복잡한 라우팅 규칙이 필요한 경우 관리가 어려울 수 있음. |
유연한 라우팅: URL, 호스트 이름 기반 라우팅 가능 (ALB). | 특정 유형에 따라 선택과 설정이 요구됨. |
ELB의 동작 과정
- 클라이언트 요청이 ELB에 도달.
- 리스너가 요청을 수신.
- ELB는 요청을 **상태가 양호한 대상 그룹(Target Group)**의 인스턴스에 분배.
- 인스턴스가 요청을 처리한 뒤, 클라이언트에 응답.
ELB와 Auto Scaling의 관계
- ELB는 트래픽을 분산하여 서버의 부하를 줄이고,
- Auto Scaling은 트래픽 증가/감소에 따라 서버를 자동으로 추가하거나 제거.
이 둘을 결합하면 높은 가용성과 확장성을 동시에 확보할 수 있습니다.
쉽게 이해하기
- **ELB는 "트래픽 신호등"**입니다.
클라이언트 요청이 서버로 몰리지 않도록 여러 서버로 교통정리를 해줍니다.
고장 난 서버를 자동으로 제외하고, 정상 작동 중인 서버로만 트래픽을 보내줍니다.
Application Loadbalancer 사용해보기
#!/bin/bash
# 스크립트가 Bash 쉘에서 실행되도록 지정하는 선언.
apt-get update
# 패키지 관리자(Apt)를 통해 패키지 목록을 업데이트하여 최신 정보를 가져옴.
apt-get install -y nginx
# Nginx 웹 서버를 설치. "-y"는 설치 중 사용자 입력을 자동으로 승인.
cat <<EOF > /var/www/html/index.html
# "cat" 명령을 사용하여 HTML 파일을 작성.
# "<<"와 "EOF"를 사용하여 여러 줄의 텍스트를 하나의 파일로 입력.
# 이 텍스트는 "/var/www/html/index.html" 파일에 저장됨.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to Nginx</title>
</head>
<body>
<h1>Hello World!</h1>
<p>AWS deployed by Me!</p>
<p>private ip is $(hostname -f)</p>
</body>
</html>
EOF
# HTML 파일 작성 완료.
# $(hostname -f)는 현재 인스턴스의 호스트 이름(프라이빗 IP 포함)을 출력하여 HTML 페이지에 포함.
sudo systemctl start nginx
# Nginx 서비스를 시작.
# "sudo"를 사용하여 관리자 권한으로 실행.
'Cloud > AWS' 카테고리의 다른 글
[AWS] RDS (AWS의 관계형 데이터베이스 서비스) (0) | 2025.03.04 |
---|---|
[AWS] SSL과 TLS (웹 브라우저와 서버간 데이터 전송 암호화) (0) | 2025.03.03 |
[AWS] EBS (AWS의 인스턴스용 저장공간) & AMI (AWS 환경 정보) (0) | 2025.03.02 |
[AWS] EC2 (AWS에서 제공하는 가상 서버, 애플리케이션 실행) (0) | 2025.03.01 |
[AWS] Billing (AWS 계정 사용량과 비용을 모니터링, 요금 청구) (0) | 2025.02.28 |