Circuit Breaker
개요
Circuit Breaker 정책은 마이크로서비스 아키텍처에서 상위 서비스의 상태를 모니터링하고 서비스가 불안정해질 때 요청을 차단하여 연쇄 실패를 방지하도록 설계되었습니다. 이는 시스템 안정성, 향상된 사용자 경험 및 실패로부터의 빠른 복구를 보장합니다.
서킷 브레이커는 three states 사이를 전환합니다:
- Closed: 요청이 정상적으로 처리됩니다.
- Open: 요청이 높은 실패율로 인해 차단됩니다.
- Half-Open: 서비스가 복구되었는지 확인하기 위해 제한된 수의 테스트 요청이 전송됩니다.
이 정책은 분산 시스템에서 prevent excessive retries, reduce latency, 및 ensure fault tolerance에 도움이 됩니다.
구성 세부정보
필드 구성
서킷 브레이커 정책은 시스템 실패를 기반으로 요청이 차단되는 시기와 방법을 결정하는 여러 configurable parameters을 제공합니다.
Field name | Key | Type | Required | Description |
---|---|---|---|---|
오류 측정 단위 시간 (초) | window_time | number | true | 초 단위의 윈도우 크기 |
오류 비율 (%) | failure_percent_threshold | number | true | 회로를 열기 위해 실패해야 하는 요청의 비율 |
최소 요청 수* | min_calls_in_window | number | true | 계산을 시작하기 위해 윈도우에 존재해야 하는 최소 호출 수 |
API 타임아웃 설정 (밀리초) | api_call_timeout_ms | number | true | 요청이 타임아웃되고 실패로 간주되기 전에 대기할 기간 |
오픈 상태 지속 시간 (초) | wait_duration_in_open_state | number | true | 오픈 상태에서 반 오픈 상태로 자동 전환되기 전에 대기할 시간(초) |
반 오픈 상태 지속 시간 (초) | wait_duration_in_half_open_state | number | true | 반 오픈 상태에서 닫힌 상태로 자동 전환되기 전에 대기할 시간(초) |
반 오픈 상태에서의 최소 요청 수* | half_open_min_calls_in_window | number | true | 계산을 시작하기 위해 반 오픈 상태에 존재해야 하는 최소 호출 수 |
반 오픈 상태에서의 최대 요청 수* | half_open_max_calls_in_window | number | true | 반 오픈 상태에서 허용되는 최대 호출 수 |
응답 오류 코드 설정* | error_status_code | number | false | 오류 발생 시 응답 상태 코드를 재정의합니다 (회로 차단기가 요청을 차단함) |
응답 오류 메시지 설정* | error_msg_override | string | false | 오류 발생 시 사용자 정의 메시지로 재정의합니다 |
응답 헤더 설정* | response_header_override | string | false | 오류 발생 시 "Content-Type" 응답 헤더를 재정의합니다 |
예외 경로 설정* | excluded_apis | string | true | 이러한 API에서 회로 차단기를 실행하지 않도록 방지하는 문자열화된 JSON. 각 경로의 플러스 또는 마이너스 버튼을 클릭하여 추가 경로를 추가하거나 삭제할 수 있습니다. |
활성 대체 경로 | fallback path | string | false | 주요 서비스가 사용할 수 없을 때 요청을 처리하기 위해 정의된 대체 경로입니다. |
회로 차단기 동작에 대한 추가 노트
The Circuit Breaker는 실패 감지 주기를 기반으로 작동하며 세 가지 상태를 전환합니다:
- Closed: 트래픽이 통과하고 오류 비율이 모니터링되는 정상 상태입니다.
- Open: 오류 비율 임계값이 초과되면 트리거되어 모든 수신 트래픽을 일시적으로 차단합니다.
- Half-Open: 구성된 시간 후에 제한된 트래픽이 시스템 복구를 테스트하기 위해 허용됩니다.
- Recovery: 테스트 트래픽이 문제 없이 통과하면 시스템은 정상 상태로 돌아갑니다 (닫힘).
각 설정은 이 생명 주기를 제어하는 데 기여합니다:
Field | Description |
---|---|
최소 요청 수 | 오류 측정을 시작하기 위한 단위 시간 내 최소 요청 수. |
API 타임아웃 | 요청이 이 임계값을 초과하면 실패로 간주됩니다. |
열린 상태 지속 시간 | 회로가 열린 상태로 유지되는 시간(초). |
반열림 지속 시간 | 회로가 반열림 상태로 유지되는 시간(초). |
반열림에서 최소 요청 수 | 반열림 상태에서 오류 비율을 다시 관찰하기 위해 필요한 최소 트래픽. |
반열림에서 최대 요청 수 | 복구를 평가하기 위한 최대 테스트 요청 수. |
응답 구성 옵션
- Custom Error Code: 트래픽이 차단될 때 반환되는 오류 코드.
- Custom Error Message: 트래픽이 차단될 때 반환되는 메시지 본문.
- Custom Error Content-Type: 오류 응답의 Content-Type.
예외 경로 구성
회로 차단기가 적용되지 않아야 하는 특정 경로를 정의합니다.
노트
형식: METHOD + PATH
예: GET /example/v1
폴백 경로 구성
회로 차단기가 활성화되면 요청을 대체 페이지로 리디렉션할 수 있습니다:
- 폴백 경로는 차단된 요청에 대한 사용자 정의 리디렉션 경로를 정의할 수 있습니다.
- 폴백 경로가 정의되지 않는 한 기본 경로가 사용됩니다.
- 동일한 API에서 특정 경로로 리디렉션하려면 원하는 API PATH를 폴백 경로로 지정합니다.