고가용성(HA, High Availability)은 시스템이 오랫동안 가동 상태를 유지하도록 설계하는 아키텍처 원칙이다. 일반적으로 99.9%(3-9s)~99.999%(5-9s)의 가용성을 목표로 한다.
가용성 등급
| 가용성 | 연간 다운타임 | 통칭 |
|---|
| 99% | 87.6시간 | 2-nines |
| 99.9% | 8.7시간 | 3-nines |
| 99.99% | 52.6분 | 4-nines |
| 99.999% | 5.3분 | 5-nines |
HA 핵심 패턴
1. 이중화 (Redundancy)
Active-Passive: 주 서버 장애 시 대기 서버 전환
Active-Active: 모든 서버가 트래픽 처리 (부하분산)
2. 헬스체크 & 자동 복구
yaml
# Kubernetes liveness/readiness probe
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /ready
port: 8080
periodSeconds: 5
failureThreshold: 1
3. 서킷 브레이커
typescript
// Resilience4j 패턴 (Node.js)
import CircuitBreaker from 'opossum';
const breaker = new CircuitBreaker(callExternalService, {
timeout: 3000, // 3초 타임아웃
errorThresholdPercentage: 50, // 50% 실패 시 열림
resetTimeout: 30000, // 30초 후 반열림
});
breaker.fallback(() => cachedResponse);
breaker.on('open', () => console.log('Circuit OPEN'));
AWS Multi-AZ 아키텍처
Region: ap-northeast-2
┌─── AZ-a ───────────┐ ┌─── AZ-b ───────────┐ ┌─── AZ-c ─────────┐
│ Web Server × 2 │ │ Web Server × 2 │ │ Web Server × 2 │
│ App Server × 2 │ │ App Server × 2 │ │ App Server × 2 │
│ RDS Primary │ │ RDS Standby │ │ │
└────────────────────┘ └────────────────────┘ └──────────────────┘
↑ Application Load Balancer (교차 AZ)
체크리스트