2021. 7. 31. 18:31ㆍSpringBoot Monitoring/SpringBoot Resilience4j
resilience4j 사이트 내용을 간단히 정리한 후 예제를 통하여 CircuitBreaker에 대해 알아보자.
소개
CircuitBreaker는 정상적인 3가지 상태(CLOSED, OPEN, HALF_OPEN)와 특정한 2가지 상태(DISABLED, FORCED_OPEN)를 가진다.
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
'SpringBoot Monitoring > SpringBoot Resilience4j' 카테고리의 다른 글
RateLimiter 예제 (0) | 2021.08.22 |
---|---|
Bulkhead 예제 (0) | 2021.08.15 |
Retry 예제 (0) | 2021.08.07 |
CircuitBreaker 예제 (0) | 2021.07.31 |