Resilience

Istio의 복원력(Resilience) 기능은 서비스 메시가 장애 상황에서도 안정적으로 동작하도록 보장합니다.

목차

추가 복원력 패턴

이 문서에서는 다음 패턴들도 다룹니다:

  • Circuit Breaker: Connection Pool을 통한 회로 차단

  • Retry: 재시도 정책

  • Timeout: 요청 시간 제한

  • Fault Injection: 장애 주입 테스트

개요

복원력은 분산 시스템에서 매우 중요한 특성입니다. Istio는 다양한 복원력 패턴을 자동으로 구현할 수 있습니다.

핵심 복원력 패턴

spinner

1. Outlier Detection (이상 감지)

비정상 동작을 하는 서비스 인스턴스를 자동으로 감지하고 트래픽 풀에서 제외합니다.

주요 기능:

  • 연속된 오류 감지

  • 자동 제외 및 복구

  • Circuit Breaker와 함께 작동

2. Rate Limiting (요청 속도 제한)

서비스를 과부하로부터 보호하기 위해 요청 속도를 제한합니다.

주요 기능:

  • Token Bucket 알고리즘

  • 로컬 및 글로벌 Rate Limiting

  • 클라이언트별, 경로별 제한

3. Zone Aware Routing (지역 인식 라우팅)

가용 영역(Availability Zone) 간 트래픽을 최적화하여 지연시간을 줄이고 비용을 절감합니다.

주요 기능:

  • 같은 AZ 내 트래픽 우선

  • 크로스 AZ 비용 절감

  • 장애 시 자동 장애조치

4. Circuit Breaker (회로 차단기)

서비스 과부하를 방지하기 위해 연결 수와 요청 수를 제한합니다.

작동 방식:

spinner

주요 기능:

  • TCP 연결 수 제한

  • HTTP 요청 수 제한

  • Pending 요청 제한

  • Overflow 시 즉시 실패 (Fail Fast)

5. Retry (재시도)

일시적인 장애에 대해 자동으로 요청을 재시도합니다.

재시도 조건 (retryOn):

  • 5xx: 서버 오류 (500, 502, 503, 504)

  • reset: TCP 연결 리셋

  • connect-failure: 연결 실패

  • refused-stream: HTTP/2 스트림 거부

  • retriable-4xx: 재시도 가능한 4xx (예: 409)

  • gateway-error: Gateway 오류 (502, 503, 504)

Exponential Backoff (지수 백오프):

작동 방식:

spinner

6. Timeout (타임아웃)

요청이 무한정 대기하지 않도록 시간 제한을 설정합니다.

타임아웃 계층:

권장 설정:

  • Gateway → Frontend: 30-60초 (사용자 대면)

  • Service → Service: 5-10초 (내부 통신)

  • Database 쿼리: 2-5초

  • 외부 API: 10-30초

7. Fault Injection (장애 주입)

카오스 엔지니어링을 위해 의도적으로 장애를 주입합니다.

사용 시나리오:

  1. 네트워크 지연 시뮬레이션:

  1. 간헐적 장애 테스트:

  1. 특정 사용자에게만 장애 주입:

복원력 패턴 조합

Outlier Detection + Circuit Breaker

Rate Limiting + Retry

복원력 아키텍처

spinner

복원력 메트릭

Prometheus 쿼리

Grafana 대시보드 패널

Circuit Breaker 상태:

Retry 효과:

모범 사례

1. Outlier Detection 임계값 조정

2. Rate Limiting 단계별 적용

3. Zone Aware Routing 우선순위

4. Circuit Breaker 설정

권장 값:

  • maxConnections: 파드 수 × 예상 동시 연결 수 × 1.5

  • http1MaxPendingRequests: 10-50 (빠른 실패가 중요)

  • maxRequestsPerConnection: 1-5 (연결 재사용 제한)

5. Retry 정책

재시도 가이드라인:

  • GET, HEAD, OPTIONS: 안전하게 재시도 가능

  • POST, PUT, PATCH: 멱등성 보장된 경우만 재시도

  • DELETE: 멱등성 있으므로 재시도 가능

6. Timeout 설정

타임아웃 공식:

예: timeout: 10s, perTryTimeout: 2s, attempts: 3

  • 최소 필요: 2s × 3 = 6s

  • 권장: 10s (여유 포함)

7. Fault Injection 테스트

테스트 단계:

  1. 개발 환경: 100% 장애 주입으로 철저히 테스트

  2. 스테이징: 특정 사용자 그룹에만 적용

  3. 프로덕션: Canary 방식으로 점진적 적용 (1% → 5% → 10%)

문제 해결

Outlier Detection이 작동하지 않음

Rate Limiting이 적용되지 않음

Zone Aware Routing이 작동하지 않음

Circuit Breaker가 열리지 않음

Retry가 작동하지 않음

Timeout이 적용되지 않음

Fault Injection이 작동하지 않음

다음 단계

  1. Outlier Detection: 비정상 인스턴스 자동 감지

  2. Rate Limiting: 요청 속도 제한

  3. Zone Aware Routing: 지역 인식 라우팅

참고 자료

공식 문서

AWS 관련 자료

패턴 및 아키텍처

퀴즈

이 장에서 배운 내용을 테스트하려면 Istio Resilience 퀴즈를 풀어보세요.

마지막 업데이트