본문으로 건너뛰기
버전: Latest(v3.0) 🔥

Circuit Breaker

개요

Circuit Breaker 정책은 마이크로서비스 아키텍처에서 연쇄 실패를 방지하기 위해 상위 서비스의 상태를 모니터링하고 서비스가 불안정해질 때 요청을 차단하도록 설계되었습니다. 이는 시스템 안정성, 향상된 사용자 경험 및 실패로부터의 빠른 복구를 보장합니다.

회로 차단기는 three states 사이를 전환합니다:

  • Closed: 요청이 정상적으로 처리됩니다.
  • Open: 요청이 높은 실패율로 인해 차단됩니다.
  • Half-Open: 서비스가 복구되었는지 확인하기 위해 제한된 수의 테스트 요청이 전송됩니다.

이 정책은 분산 시스템에서 prevent excessive retries, reduce latency, 및 ensure fault tolerance에 도움이 됩니다.

구성 세부정보

필드 구성

회로 차단기 정책은 시스템 실패를 기반으로 요청이 차단되는 시기와 방법을 결정하는 여러 configurable parameters을 제공합니다.

Field nameKeyTypeRequiredDescription
오류 측정 단위 시간 (초)window_timenumber​true​초 단위의 윈도우 크기​
오류 비율 (%)failure_percent_threshold​number​true​회로를 열기 위해 실패해야 하는 요청의 비율​
최소 요청 수*min_calls_in_windownumber​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 pathstringfalse기본 서비스가 사용할 수 없을 때 요청을 처리하기 위해 정의된 대체 경로입니다.

회로 차단기 동작에 대한 추가 노트

The Circuit Breaker는 실패 감지 주기를 기반으로 작동하며 세 가지 상태를 전환합니다:

  1. Closed: 트래픽이 통과하고 오류 비율이 모니터링되는 정상 상태입니다.
  2. Open: 오류 비율 임계값이 초과되면 트리거되어 모든 수신 트래픽을 일시적으로 차단합니다.
  3. Half-Open: 구성된 시간 후에 시스템 복구를 테스트하기 위해 제한된 트래픽이 허용됩니다.
  4. Recovery: 테스트 트래픽이 문제 없이 통과하면 시스템은 정상 상태로 돌아갑니다 (닫힘).

각 설정은 이 생명 주기를 제어하는 데 기여합니다:

FieldDescription
최소 요청 수오류 측정을 시작하기 위한 단위 시간 내 최소 요청 수.
API 타임아웃요청이 이 임계값을 초과하면 실패로 간주됩니다.
열린 상태 지속 시간회로가 열린 상태로 유지되는 시간(초).
반열림 지속 시간회로가 반열림 상태로 유지되는 시간(초).
반열림에서의 최소 요청 수반열림 상태에서 오류 비율을 다시 관찰하기 위해 필요한 최소 트래픽.
반열림에서의 최대 요청 수복구를 평가하기 위한 최대 테스트 요청 수.

응답 구성 옵션

  • Custom Error Code: 트래픽이 차단될 때 반환되는 오류 코드.
  • Custom Error Message: 트래픽이 차단될 때 반환되는 메시지 본문.
  • Custom Error Content-Type: 오류 응답의 Content-Type.

예외 경로 구성

회로 차단기가 적용되지 않아야 하는 특정 경로를 정의합니다.

노트

형식: METHOD + PATH

예: GET /example/v1

대체 경로 구성

회로 차단기가 활성화되면 요청이 대체 페이지로 리디렉션될 수 있습니다:

  • 대체 경로는 차단된 요청에 대한 사용자 정의 리디렉션 경로를 정의할 수 있습니다.
  • 대체 경로가 정의되지 않는 한 기본 경로가 사용됩니다.
  • 동일한 API 내에서 특정 경로로 리디렉션하려면 원하는 API PATH를 대체 경로로 지정합니다.

APIM 회로 차단기를 구성할 때 자주 묻는 질문

  1. 회로 차단기가 언제 활성화되는지를 실제로 결정하는 매개변수는 무엇인가요? (닫힘 → 열림)

회로 차단기는 only when these threshold parameters work together에서 활성화됩니다:

  • Error measurement unit time (window_time)
  • Minimum number of requests (min_calls_in_window)
  • Error rate (%) (failure_percent_threshold)
  • API timeout setting (api_call_timeout_ms)

회로는 all conditions below are met within the configured time window일 때 열립니다:

  • window_time 동안 수신된 요청 수 ≥ min_calls_in_window
  • 실패한 요청(타임아웃 포함)이 실패 비율을 failure_percent_threshold에 도달하거나 초과하게 만듭니다.
  1. 활성화에 영향을 미치지 않지만 종종 임계값과 혼동되는 매개변수는 무엇인가요?

다음 매개변수는 do not participate in activation이며 after the circuit is already Open에서만 사용됩니다:

  • wait_duration_in_open_state
  • wait_duration_in_half_open_state
  • half_open_min_calls_in_window
  • half_open_max_calls_in_window
  1. 실패가 발생할 때 회로 차단기가 즉시 활성화되나요?

아니요.

활성화는 both volume and error rate에 따라 달라집니다:

  • 충분한 요청이 발생해야 합니다 (min_calls_in_window)
  • 실패가 임계값을 초과해야 합니다 (failure_percent_threshold)
  • 모든 평가는 window_time 내에서 이루어집니다.

오직 all activation conditions are satisfied일 때 회로는 Closed → Open에서 전환됩니다.


매개변수 그룹 및 그 책임

  1. 활성화 / 임계값 매개변수 (닫힘 → 열림)

이 매개변수들은 when the circuit opens를 결정하기 위해 함께 평가됩니다:

  • window_time
  • min_calls_in_window
  • failure_percent_threshold
  • api_call_timeout_ms
  1. 복구 제어 매개변수 (열림 → 반열림 → 닫힘)

이 매개변수들은 활성화가 아닌 how and when traffic is restored를 제어합니다:

  • wait_duration_in_open_state
  • half_open_min_calls_in_window
  • half_open_max_calls_in_window
  • wait_duration_in_half_open_state
  1. 응답 사용자 정의 매개변수

이 매개변수는 클라이언트에 반환되는 응답에 영향을 미치지만 상태 전환에는 영향을 미치지 않습니다.

  • error_status_code
  • error_msg_override
  • response_header_override

일부 일반적인 잘못된 구성

CaseReason
회로가 절대 열리지 않음min_calls_in_window이 너무 높음
회로가 너무 자주 열림window_time이 너무 짧거나 임계값이 너무 낮음
복구가 절대 발생하지 않음half-open max calls가 너무 낮음
헬스 체크가 열림 상태를 유발함제외된 API가 누락됨