분산 시스템의 기본 Scalability vs Availability

 

[1] Scalability (확장성)

 

Scalability는 시스템이 사용자 수, 데이터 양, 처리량이 증가하거나 감소할 때, 성능과 처리 능력을 유지하거나 향상시키는 능력을 말합니다.
즉, **"얼마나 잘 확장할 수 있는가?"**를 측정하는 지표입니다.

Scalability의 주요 특징

  1. 확장 방식
    • 수평 확장 (Horizontal Scaling):
      더 많은 서버나 인스턴스를 추가하여 확장.
      예: EC2 인스턴스를 추가하여 부하 분산.
    • 수직 확장 (Vertical Scaling):
      기존 서버의 리소스(CPU, RAM 등)를 업그레이드.
      예: 더 높은 사양의 EC2 인스턴스로 교체.
  2. 목표
    • 높은 처리량성능 유지.
    • 사용자 증가, 데이터 처리량 증가에 따라 유연하게 대처.
  3. 중요한 설계 요소
    • 무중단 확장 지원.
    • 부하 분산(Load Balancer)과 자동 확장(Auto Scaling) 설정.

예시

  • Scalability가 뛰어난 시스템:
    전자상거래 사이트가 트래픽 급증(블랙프라이데이 등)에도 서버를 추가해 안정적으로 작동.
  • AWS 서비스: Auto Scaling, DynamoDB의 확장성 등.

[2] Availability (가용성)

Availability는 시스템이 항상 정상적으로 작동하며, 사용 가능한 상태를 유지하는 능력을 의미합니다.
즉, **"서비스가 항상 사용 가능하게 유지되는가?"**를 측정하는 지표입니다.

Availability의 주요 특징

  1. 주요 목표
    • 서비스가 중단되지 않고 사용 가능한 상태를 유지.
    • 사용자 요청에 대해 항상 응답 가능.
  2. 중요한 설계 요소
    • 장애 복구(Recovery): 장애 발생 시 빠르게 복구.
      예: 장애가 난 인스턴스를 자동으로 교체.
    • 중복 구성(Redundancy): 중요한 시스템은 여러 복사본을 유지.
      예: 여러 AZ(가용 영역)에서 서버 실행.
    • 무중단 배포: 서비스 중단 없이 업데이트 적용.
  3. Availability의 측정
    • **Uptime(가동 시간)**으로 측정.
      예: 99.9% 가용성은 1년 동안 약 8시간 45분의 다운타임 허용.

예시

  • Availability가 높은 시스템:
    금융 서비스가 24/7로 항상 거래 가능.
  • AWS 서비스: Multi-AZ RDS, ELB(Elastic Load Balancer)로 부하 분산.

Scalability와 Availability의 차이점

  Scalability (확장성) Availability (가용성)
정의 시스템의 처리 능력을 유지하거나 확장하는 능력. 시스템이 항상 정상 작동하며 사용 가능한 상태를 유지하는 능력.
목표 증가하는 부하(사용자, 데이터 등)에 유연하게 대응. 서비스 중단 없이 항상 작동 가능.
초점 성능과 처리량 유지 또는 향상. 안정성과 중단 없는 서비스 제공.
주요 설계 요소 부하 분산, 자동 확장(Auto Scaling), 데이터 파티셔닝. 장애 복구, 중복 구성, 무중단 배포.
예시 트래픽 증가 시 인스턴스 추가로 대응. 장애가 발생해도 빠르게 복구하여 사용자에게 영향을 최소화.

Scalability와 Availability의 관계

  • Scalability는 Availability를 지원:
    트래픽 증가에 대응하지 못하면 서비스가 중단될 수 있으므로 확장성이 가용성을 높이는 데 도움.
  • Availability는 Scalability를 필요로 함:
    가용성을 유지하려면 트래픽 증가 시 확장이 가능해야 함.

추가적인 고려 사항

  1. Trade-off
    • Scalability와 Availability를 동시에 극대화하기 어렵기 때문에 우선순위를 설정해야 함.
      예: 초기에 가용성보다는 확장성에 초점을 맞출 수 있음.
  2. AWS에서의 구현
    • Scalability:
      • Auto Scaling으로 EC2 인스턴스 수 조절.
      • DynamoDB의 읽기/쓰기 용량 자동 조정.
    • Availability:
      • ELB로 다중 인스턴스에 부하 분산.
      • Multi-AZ RDS로 장애 복구 및 중단 방지.
  3. 실제 사례
    • Netflix:
      • Scalability: 글로벌 사용자 증가에 맞춰 서버를 확장.
      • Availability: 장애 발생 시에도 스트리밍 서비스가 끊기지 않도록 설계.

쉽게 이해하기

  • Scalability는 "더 많은 손님을 받을 수 있는 큰 식당"을 만드는 것.
  • Availability는 "식당이 항상 열려 있고 손님이 들어올 수 있는 상태"를 유지하는 것.

 

 

ELB (Elastic Load Balancer)

📌  **ELB (Elastic Load Balancer)**는 AWS에서 제공하는 트래픽 분산 서비스로, 애플리케이션의 가용성과 확장성을 높이는 역할을 합니다.

  • ELB는 들어오는 요청(HTTP, HTTPS, TCP 등)을 여러 EC2 인스턴스나 컨테이너로 자동으로 균등하게 분배합니다.
    쉽게 말해, 서버 앞에서 교통 정리를 해주는 신호등 같은 역할을 합니다. 🚦

ELB의 주요 특징

  1. 트래픽 분산
    • 사용자 요청을 여러 서버로 분산하여 트래픽 부하를 줄이고 성능을 최적화.
  2. 고가용성 지원
    • 서버 중 일부가 다운되더라도 정상 작동하는 서버로 트래픽을 전달하여 서비스 중단 방지.
  3. 확장성
    • 서버 수가 늘어나거나 줄어드는 상황에서도 자동으로 적응 가능.
  4. 자동 상태 검사
    • 연결된 인스턴스(서버)의 상태를 지속적으로 모니터링하여 정상적인 인스턴스에만 트래픽 전달.
  5. 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의 주요 사용 사례

  1. 트래픽 부하 분산
    • 웹 서버 또는 애플리케이션 서버 간 요청을 분산하여 성능 최적화.
  2. 서비스 중단 방지
    • 서버 장애 발생 시 정상 상태의 서버로 트래픽을 자동 전달.
  3. HTTPS 지원
    • SSL/TLS 인증서를 로드 밸런서에 설치해 보안 트래픽 처리.
  4. 자동 확장(Auto Scaling)과 결합
    • 서버가 추가되거나 삭제될 때 자동으로 인스턴스를 로드 밸런서에 등록.

ELB의 주요 구성 요소

  1. 리스너 (Listener)
    • 로드 밸런서가 들어오는 요청을 수신하는 구성 요소.
    • 프로토콜과 포트 번호(예: HTTP:80, HTTPS:443)를 설정.
  2. 대상 그룹 (Target Group)
    • 트래픽이 분배될 EC2 인스턴스, 컨테이너, 또는 IP 주소의 집합.
  3. 상태 검사 (Health Check)
    • 대상의 상태를 주기적으로 확인하여, 정상 상태인 대상에만 트래픽 전달.

ELB의 장단점

장점 단점
고가용성 제공: 서버 장애 시 자동 대응 초기 설정이 복잡할 수 있음.
확장성 지원: 증가하는 트래픽에 자동 대응 트래픽 분산 정책에 따라 추가 비용 발생 가능.
보안 강화: HTTPS/TLS 트래픽 지원 복잡한 라우팅 규칙이 필요한 경우 관리가 어려울 수 있음.
유연한 라우팅: URL, 호스트 이름 기반 라우팅 가능 (ALB). 특정 유형에 따라 선택과 설정이 요구됨.

ELB의 동작 과정

  1. 클라이언트 요청이 ELB에 도달.
  2. 리스너가 요청을 수신.
  3. ELB는 요청을 **상태가 양호한 대상 그룹(Target Group)**의 인스턴스에 분배.
  4. 인스턴스가 요청을 처리한 뒤, 클라이언트에 응답.

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"를 사용하여 관리자 권한으로 실행.

 

+ Recent posts