Circuit Breaker

Circuit Breaker는 장애가 발생한 서비스를 자동으로 격리하여 연쇄 장애를 방지합니다.

목차

Why Circuit Breaker?

Cascading Failure 방지

마이크로서비스 아키텍처에서 한 서비스의 장애가 다른 서비스로 전파되는 것을 방지합니다.

spinner

주요 이점

문제
Circuit Breaker 없이
Circuit Breaker 사용

응답 시간

타임아웃까지 대기 (30s+)

즉시 실패 (1ms)

리소스 사용

스레드/연결 고갈

리소스 보호

장애 전파

연쇄 장애 발생

장애 격리

복구 시간

수동 개입 필요

자동 복구 시도

Circuit Breaker 개요

spinner

Connection Pool 설정

Outlier Detection

Outlier Detection은 비정상적인 인스턴스를 자동으로 제거합니다.

Outlier Detection 상세 설정

Retry 정책과의 조합

Circuit Breaker와 Retry를 함께 사용하여 복원력을 높입니다.

기본 조합

Retry Budget 패턴

실전 예제

1. 메시 내부 서비스 Circuit Breaker

시나리오: 데이터베이스 서비스 보호

사용 사례:

  • 데이터베이스 연결 풀 고갈 방지

  • 느린 쿼리로 인한 연쇄 장애 차단

  • 자동으로 비정상 인스턴스 제거

2. maxConnections: 1 패턴 (Single Connection)

시나리오: 레거시 시스템 또는 리소스 제약 서비스

사용 사례:

  • 레거시 시스템이 동시 연결을 처리 못하는 경우

  • 외부 API rate limit이 매우 엄격한 경우

  • 단일 연결로 순차 처리가 필요한 경우

3. 서브셋별 Circuit Breaker

시나리오: 버전별로 다른 Circuit Breaker 설정

4. 고급 Connection Pool 패턴

시나리오: 고성능 서비스

5. Health Check 기반 Circuit Breaker

외부 서비스 Circuit Breaker

ServiceEntry와 함께 사용하여 외부 서비스를 보호합니다.

1. 외부 API Circuit Breaker

2. 외부 데이터베이스 Circuit Breaker

3. Rate Limited 외부 서비스

모니터링 및 디버깅

Envoy 메트릭 확인

주요 메트릭

Grafana 대시보드

istioctl 명령어

중요 주의사항

⚠️ Circuit Breaker는 데이터 정합성을 보장하지 않습니다

핵심 원칙: Circuit Breaker는 장애 격리를 위한 도구이지, 중복 요청 방지데이터 정합성 보장 도구가 아닙니다.

Circuit Breaker의 역할과 한계

spinner

문제 시나리오: Retry + Circuit Breaker

spinner

문제: Circuit Breaker가 작동하기 전(5번 연속 에러)에 이미 3번의 중복 결제가 발생했습니다.

잘못된 사용 예시

올바른 사용 패턴

패턴 1: Circuit Breaker만 사용 (Retry 비활성화)

패턴 2: 애플리케이션 레벨 Idempotency + Circuit Breaker

서비스별 안전 전략

서비스 유형
Retry
Circuit Breaker
Idempotency 필요

상품 조회

✅ 3회

✅ 필요

❌ 불필요

장바구니

✅ 3회

✅ 필요

❌ 불필요

주문 생성

❌ 0회

✅ 필요

✅ 필수

결제

❌ 0회

✅ 필요

✅ 필수

재고 차감

❌ 0회

✅ 필요

✅ 필수

포인트 적립

❌ 0회

✅ 필요

✅ 필수

알림 발송

✅ 3회 (멱등)

✅ 필요

⚠️ 권장

Connection Pool과 데이터 정합성

Connection Pool 설정도 데이터 정합성을 보장하지 않습니다. 단지 동시 연결 수를 제한할 뿐입니다.

실전 체크리스트

배포 전 확인사항:

모니터링:

모범 사례

1. 점진적 설정

2. 서비스 유형별 설정

3. 알림 설정

4. 테스트 시나리오

5. 문서화 템플릿

참고 자료

마지막 업데이트