CircuitBreaker 개념

2021. 7. 31. 18:31SpringBoot Monitoring/SpringBoot Resilience4j

반응형

resilience4j 사이트 내용을 간단히 정리한 후 예제를 통하여 CircuitBreaker에 대해 알아보자.

소개

CircuitBreaker는 정상적인 3가지 상태(CLOSED, OPEN, HALF_OPEN)와 특정한 2가지 상태(DISABLED, FORCED_OPEN)를 가진다.

CircuitBreaker 상태

CircuitBreaker는 sliding window를 사용하여서 호출 결과를 집계하고 저장한다. CircuitBreaker 방식은 count-based sliding window 방식과 time-based sliding window 방식을 선택할 수 있다. count-based sliding window 방식은 마지막 N번의 호출 결과를 집계한다. time-based sliding window 방식은 마지막 N초의 호출 결과 집계한다.

 

Count-based sliding window

사용자가 설정한 호출 횟수와 실패율을 기반으로 CircuitBreaker의 상태를 변경한다.

예제에서 살펴보겠지만 속성 값을 가지고 한번 계산해보도록 하자.

 

slidingWindowSize = 10, minimumNumberCalls = 6, failureRateThreshold = 50 

위의 속성 값의 의미는 실패율을 계산하기 위한 최소 횟수는 6회이다. 만약 5번 호출되는 경우 최초 상태인 CLOSED 상태에서 변경되지 않으며 6번째 호출되었을 때 6번 호출 횟수 중에 실패가 4번인 경우 4/6 실패 확률은 67%가 된다. 실패 확률은 failureRateThreshold 가 50% 이므로 이 값을 넘었기 때문에 OPEN 상태로 변경될 것이다.

 

여기서 중의 할 점은 minimumNumberCalls가 slidingWindowSize보다 큰 경우 slidingWindowSize 설정값으로 호출 횟수가 정의된다.

 

Time-based sliding window

사용자가 설정한 N초와 실패율을 기반으로 CircuitBreaker의 상태를 변경한다.

예제에서 살펴보겠지만 속성 값을 가지고 한번 계산해보도록 하자.

 

slidingWindowSize = 10, minimumNumberCalls = 6, failureRateThreshold = 50 

slidingWindowSize는 10초를 의미한다. 10초 동안 6번 호출되었을 때 실패율을 계산하여서 설정한 실패율 보다 높은 경우 상태 값을 변경한다.

만약 10초 동안 5번 호출하고 10초 지난 후 호출하는 경우 값이 Reset 되어서 다시 계산하게 된다.

 

다음 편에는 Count-based sliding window, Time-based sliding window에 대한 예제를 작성해보도록 하겠습니다.

 

기본적인 개념과 속성은 아래 공식 사이트를 참고하세요.https://resilience4j.readme.io/docs/circuitbreaker

 

CircuitBreaker

Getting started with resilience4j-circuitbreaker

resilience4j.readme.io

 

반응형

'SpringBoot Monitoring > SpringBoot Resilience4j' 카테고리의 다른 글

RateLimiter 예제  (0) 2021.08.22
Bulkhead 예제  (0) 2021.08.15
Retry 예제  (0) 2021.08.07
CircuitBreaker 예제  (0) 2021.07.31