← 질문 목록
#33깊이 0
서킷 브레이커는 무엇을 막아주는가?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
장애나 지연이 계속되는 의존성을 반복 호출해 내 서비스의 자원까지 묶이는 일을 막는다. 서킷 브레이커가 의존성을 복구하는 것은 아니다. 실패 가능성이 높은 호출을 잠시 거절해 장애 전파를 줄인다.
닫힘
열림
최소 표본을 채운 뒤 실패율이나 느린 호출 비율이 기준을 넘는다
열림
반열림
대기 시간이 지나면 제한된 수의 확인 호출만 보낸다
반열림
닫힘 (앞의 상태로 돌아갑니다)
확인 표본이 기준 아래면 호출을 다시 받는다
열림 (앞의 상태로 돌아갑니다)
확인 표본도 기준을 넘으면 다시 막는다
열린 동안에는 실제 의존성을 호출하지 않고 빠르게 거절한다. 덕분에 스레드와 커넥션을 오래 붙잡지 않는다. 이 거절을 사용자에게 그대로 오류로 보낼지, 캐시나 대체 응답을 줄지는 업무별로 정한다. 잘못된 대체 응답은 빠른 실패보다 위험할 수 있다.
기준은 실패율 숫자 하나가 아니다. 개수 또는 시간 기반 윈도, 판단을 시작할 최소 호출 수, 실패로 셀 예외, 느린 호출의 시간과 비율을 함께 정한다. 트래픽이 적은 구간에서 한두 번 실패했다고 열리지 않게 최소 표본이 필요하다.
반열림 호출 수도 제한한다. 장애가 끝났는지 확인한다며 대기 요청을 한꺼번에 보내면 회복 중인 의존성을 다시 무너뜨릴 수 있다. 동시 호출 수 자체를 제한하는 일은 벌크헤드의 몫이다.
재시도와 함께 쓸 때는 적용 순서에 따라 서킷이 보는 실패 횟수가 달라진다. 열린 서킷의 거절은 재시도하지 않는다. 실제 호출의 총 시도 횟수와 시간 예산을 먼저 제한하고 backoff와 jitter를 둔다.