Phase 5레슨 21

Fault Tolerance

Failover, Graceful Degradation, Bulkhead, Backpressure — 장애를 견디는 설계

💡ELI5·

배의 수밀 격벽과 Fault Tolerance

일반 시스템:
  서비스 A, B, C가 자원을 공유
  → A가 자원을 다 쓰면 B, C도 장애

Fault Tolerant 시스템 (Bulkhead):
  ┌─────┐ ┌─────┐ ┌─────┐
  │ A   │ │ B   │ │ C   │  ← 격리된 자원
  │풀 10│ │풀 10│ │풀 10│
  └─────┘ └─────┘ └─────┘
  → A가 장애 나도 B, C는 정상
💡 비유배의 수밀 격벽(Bulkhead). 한 구획에 물이 차도 다른 구획은 안전. 배 전체가 가라앉지 않는다. 소프트웨어도 서비스별로 자원을 격리하면 한 서비스 장애가 전체 장애로 번지지 않는다.
🔬Deep Dive·

장애 견디기 패턴

패턴동작해결하는 문제
Failover장애 노드 감지 → 예비 노드로 전환단일 노드 장애
Graceful Degradation부가 기능 축소, 핵심만 유지부분 장애 시 전체 중단 방지
Bulkhead자원을 격리된 풀로 분할한 서비스가 자원 독점 방지
BackpressureConsumer가 Producer에게 속도 조절 신호Consumer 압도 방지
Circuit Breaker장애 서비스 호출 차단장애 전파 방지 (Phase 2 참조)
Rate Limiting요청 수 제한과부하 방지
🔬Deep Dive·

Bulkhead 구현 예시

// 각 서비스마다 독립된 커넥션 풀
const orderPool = createPool({ max: 10 });  // 주문 전용
const paymentPool = createPool({ max: 10 }); // 결제 전용
const shippingPool = createPool({ max: 10 }); // 배송 전용

// 결제 서비스가 장애 나서 paymentPool이 고갈되어도
// orderPool, shippingPool은 영향받지 않음

// 잘못된 예: 풀을 공유하면 한 서비스 장애가 전체로 전파
const sharedPool = createPool({ max: 30 }); // ← 위험!
⚖️Trade-off·

Fault Tolerance의 비용

이점대가
부분 장애가 전체 장애로 번지지 않음자원 분할로 효율 감소 (여유 풀 필요)
핵심 기능 지속 보장구현 복잡성 증가
장애 격리로 디버깅 용이더 많은 인프라 (이중화, 복제)
사용자 경험 보호Graceful Degradation 로직 설계 비용

❓ 체크포인트 질문

  1. 1.Fault Tolerance와 High Availability의 차이는?
  2. 2.Bulkhead 패턴이 무엇이고 어떤 장애를 막는가?
  3. 3.Graceful Degradation의 예시는?
  4. 4.Backpressure가 왜 필요한가?
  5. 5.Failover에서 Active-Active와 Active-Standby의 차이는?