GH GambleHub

회로 차단기 및 분해

CB (Circuit Breaker) 는 고장을 현지화하고 업스트림 서비스 및 사용자를 보호하기 위해 열악한 종속성으로의 통화를 중단하는 보안 패턴입니다. 분해 (우아한 저하) -풀 다운 타임없이 리소스 또는 오류 (예: 캐시/불완전한 데이터 반환, "비싼" 기능 비활성화) 가없는 경우 기능을 의도적으로 단순화합니다.

주요 목표는 계단식 방울 대신 제어 된 장애를 통해 SLO 및 사용자 경험을 유지하는 것입니다.

1) 신청시기

p95/p99 성장, 타임 아웃, 잘못된 답변: 의존성이 불안정합니다.
엄격한 제한/처벌을받는 외부 API.
배상이 폭풍을 강화하는 "무거운" 백엔드 (검색, 권장 사항, 보고서).
수영장 (연결, 실) 이 고갈 될 위험이있는 고부하 지역.

2) CB 상태 및 전환

클래식 트리플:

1. 폐쇄-트래픽이 진행되고 오류/대기 시간 지표가 계산됩니다.

2. 열기-통화가 즉시 거부 (실패) 되거나 폴백으로 전송됩니다.

3. Half-Open-제한된 수의 "시험" 요청에 따라 스위치를 닫을 지 여부가 결정됩니다.

오프닝 트리거

창 당 오류/시간 초과 임계 값 (예: 마지막 N의 50% 이상).
대기 시간 임계 값 (예: p95> 대상).
결합 된 정책 (오류가 발생했습니다).

시간 유지 (쿨 다운)

고정 (예: 10-60 초) 또는 적응 (반복 작동으로 지수 증가).

3) 타임 아웃, 퇴각 및 지터

타임 아웃은 항상 업스트림 SLO보다 짧으며 마감일 전파입니다.
dempotent 작업에 대해서만 Retrai; 대부분의 경우 1-2 시도로 충분합니다.
Backoff + jitter (풀 지터) 는 동기식 반복파를 방지합니다.
Hedging (예비 요청) -경제적이고 매우 중요한 읽기에만 해당됩니다.

4) 벌크 헤드 격리 및 "퓨즈"

도메인 및 트래픽 유형 (VIP, 배경 작업, 공개 API) 별도의 연결/작업자/큐 풀입니다.
"비싼" 운영을위한 동시성 한도.
입학 제어: 대기열이 가득 찼을 때 실행하기 쉽습니다.

5) 폴백 및 저하 시나리오

옵션

캐시/스타일 응답: '오래된 재발행', L2/L3 캐시에서 데이터 반환.
읽기 전용: 쓰기/명령 블록, 안전한 읽기 허용.
대리 응답: 불완전한 데이터 (예: 권장 사항/아바타 없음).
기능 비활성화: 중요하지 않은 위젯/기능을 일시적으로 숨깁니다.
기능 플래그: 릴리스없이 빠른 동작 변경.

규칙

폴백은 결정 론적이고 빠르며 데이터로부터 안전해야합니다.
로그/트랙/메트릭에 열화 된 경로를 명시 적으로 표시합니다.

6) 우선 순위 및 트래픽 형성

VIP/유료 요금제-부족한 경우 더 높은 우선 순위/할당량.
속도 제한과 스로틀링은 의존성 저하에 대한 부담을 줄입니다.
헛간로드: 품질의 부드러운 감소 (예: 안정화 될 때까지 더 적은 결과, 잘린 이미지).

7) 관찰 및 신호

CB 지표

상태 (닫기/열기/반 열기) 및 상태 지속 시간.
원인에 의한 실패의 비율: CB- 오픈, 타임 아웃, 5xx, 재 시도 소진.
p95/p99 대기 시간 "전" 및 "후" 스위치.
폴백을 통한 요청 수/백분율.

추적

스팬의 주석: '회로 = 개방', '대체 = 캐시', '입학 = 거부'.
한계 (429/RateLimit-), 대기열 및 연결 총알과의 상관 관계.

로그/감사

개방/닫기, 임계 값, 종속성 ID의 이유.

8) 계약 및 의정서

모든 편지 선택 (C

실패: '재시도 후' (또는 '429') 가있는 '503 서비스 불가'.
부분 컨텐츠/부실: 성능 저하 메타 데이터가있는 '200 '/' 206' (예: 'X-Degraded: 참').
캐시 정책: '캐시 제어: 오래된 경우 오류, 부실한 상태'.

gRPC

'UNAVAILABLE', 'DEADLINE _ EXCEEDED' 는 클라이언트/프록시 정책에 따라 의미를 다시 트레이합니다.
요청 컨텍스트에 대한 마감일/시간 초과; 마감일을 체인 아래로 전파합니다.

이념성

POST 운영을위한 'Idempotency-Key', 국경에서의 중복 제거.

9) 일반적인 구현 (의사 코드)

pseudo onRequest(req):
if circuit. isOpen(dep):
return fallbackOrFail(req)

with timeout(T):
try:
resp = call(dep, req)
circuit. recordSuccess(dep, latency=resp. latency)
return resp except TimeoutError or 5xx as e:
circuit. recordFailure(dep)
if circuit. shouldOpen(dep):
circuit. open(dep, coolDown=adaptive())
return fallbackOrFail(req)

하프 오픈 샘플

pseudo onTimer():
if circuit. state(dep) == OPEN and coolDownExpired():
circuit. toHalfOpen(dep)

onRequestHalfOpen(req):
if circuit. allowTrial (dep): # e.g. 1 try: call -> success => close catch: reopen with longer coolDown else:
return fallbackOrFail(req)

10) 임계 값 설정

관찰 창: N 초/쿼리 슬라이딩.
오류 임계 값: 창에서 20-50% (프로파일에 따라 다름).
대기 시간 임계 값: p95 체 대상 SLO (예: 300-500 ms); 초과분은 CB의 "오류" 로 계산됩니다.
적응 형 냉각: 반복적 인 작동으로 10s → 30s → 60s.

11) 테스트 및 혼돈 관행

혼돈: 대기 시간/의존성 오류 주입, DNA 고장, 패킷 드롭.
게임 일: 전투와 같은 환경에서 스위치의 "개방" 을 시작하여 폴록을 확인하십시오.
카나리아: 트래픽의 1-5% 에 대해 POC/저하 정책을 사용하십시오.
SLO 예산: 오류 예산이 소진 될 때까지 실험을 허용하십시오.

12) 멀티 테넌시와의 통합

CB 상태는로드 프로파일에 따라 임차인 당 (시끄러운 임차인의 경우) 또는 전 세계적으로 저장할 수 있습니다.
'테넌트 _ id' 로 대체 데이터와 캐시를 세그먼트합니다.
우선 순위/할당량-계획에 따라 (VIP는 스타터 동작으로 고통받지 않아야 함).

13) 사전 판매 점검표

  • 타임 아웃 및 마감일은 엔드 투 엔드 및 일관성이 있습니다.
  • 배신은 백오프 + 지터를 사용하여 demempotent 작업에만 제한됩니다.
  • CB 임계 값은로드 테스트 데이터로 정당화됩니다.
  • 빠르고 안전한 낙하 경로가 존재합니다. 정책 캐시가 정의되었습니다
  • 벌크 헤드 격리: 별도의 풀/대기열/제한.
  • 메트릭/트레일/로그 플래그 저하 및 CB 상태.
  • 샘플 헤더/코드가있는 응답 계약 문서 (해/gRPC).
  • 혼돈 시나리오와 게임 일은 정기적으로 이루어집니다 런북이 있습니다.

14) 전형적인 오류

타임 아웃은 없습니다 → "완전히" 후퇴하고 계단식으로 떨어집니다.
선택적 (엔드 포인트/방법으로) 대신 단일 글로벌 CB-불필요한 실패.
폴록이없는 스위치 열기 → UX 저하 대신 "빈" 화면.
지터가없는 배신자 → 동기 요청 폭풍.
단기 고장으로 긴 냉각 또는 안정적인 "플립 플롭" 상태로 너무 짧습니다.
격벽의 부재-공유 수영장의 고갈 및 "헤드 오브 라인 차단".

15) 빠른 전략 선택

중요한 읽기: 오래된 응답의 CB + 캐시 + 헤징 (경제적).
기록/지불: 엄격한 타임 아웃, 최소 배상, demotency 키, 더러운 대체 없음.
외부 API: 공격적인 임계 값, 적응 형 냉각, 엄격한 스로틀 링이있는 CB.
맥동로드 마이크로 서비스: 벌크 헤드, 동시성 한도, VIP 우선 순위.

결론

서킷 브레이커와 관리 된 열화는 아키텍처 "보험" 입니다. 혼란스러운 실패를 예측 가능한 동작으로 변환합니다. 명확한 타임 아웃, 제한된 지터 퇴각, 격리 된 풀, 사려 깊은 대체 경로 및 원격 측정은 피크 및 충돌 기간 동안에도 시스템을 종속성 오류에 탄력적으로 만들고 SLO를 유지합니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.