
클라우드 & 인프라
Site Reliability Principles사이트 신뢰성 원칙
사이트 신뢰성 원칙은 대규모 분산 시스템을 안정적으로 운영하기 위한 설계·운영 철학이다. 장애 허용 설계(Fault Tolerance), 우아한 성능 저하(Graceful Degradation), 관찰 가능성(Observability)이 핵심 개념이다.
핵심 원칙
1. 모든 것은 실패한다 (Everything Fails)
→ 단일 장애점(SPOF) 제거
→ 다중화 (Redundancy)
2. 실패를 설계에 포함 (Design for Failure)
→ 서킷 브레이커, 타임아웃, 재시도
→ 카오스 엔지니어링
3. 관찰 가능성 (Observability)
→ 메트릭, 로그, 트레이스 (세 가지 기둥)
→ 알 수 없는 것을 알 수 있게
4. 자동화 (Automation)
→ 수동 운영은 오류 유발
→ 반복 작업 자동화
5. 점진적 배포 (Incremental Deployment)
→ 카나리, 블루/그린
→ 빠른 롤백서킷 브레이커 패턴
python
import time
from enum import Enum
class State(Enum):
CLOSED = "closed"
OPEN = "open"
HALF_OPEN = "half_open"
class CircuitBreaker:
def __init__(self, failure_threshold=5, recovery_timeout=60):
self.state = State.CLOSED
self.failures = 0
self.threshold = failure_threshold
self.recovery_timeout = recovery_timeout
self.last_failure_time = None
def call(self, func, *args, **kwargs):
if self.state == State.OPEN:
if time.time() - self.last_failure_time > self.recovery_timeout:
self.state = State.HALF_OPEN
else:
raise Exception("Circuit open: 서비스 불가")
try:
result = func(*args, **kwargs)
if self.state == State.HALF_OPEN:
self.state = State.CLOSED
self.failures = 0
return result
except Exception:
self.failures += 1
self.last_failure_time = time.time()
if self.failures >= self.threshold:
self.state = State.OPEN
raise