inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

장애 없는 서비스를 만들기 위한 Resilience4j - CircuitBreaker

Riot API Circuit Breaker 적용

해결된 질문

298

백종인

작성한 질문수 4

1

Riot API Limit을 보면

 

이렇게 Rate Limit이 있다고 설명되어 있는데요.
이를 위해서 CustomCircuitBreaker를 아래와 같이 개발해봤습니다.

 

@Bean(name = "shortTermCircuitBreaker")
public CircuitBreaker shortTermCircuitBreaker(CircuitBreakerRegistry registry) {
    return registry.circuitBreaker("shortTermBreaker",
        CircuitBreakerConfig.custom()
            .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
            .failureRateThreshold(1)
            .slidingWindowSize(1)
            .waitDurationInOpenState(Duration.ofSeconds(1)) // open -> half open까지 기다리는 시간
            .automaticTransitionFromOpenToHalfOpenEnabled(true) // open 상태에서 자동으로 half open으로 전환
            .build()
    );
}

@Bean(name = "longTermCircuitBreaker")
public CircuitBreaker longTermCircuitBreaker(CircuitBreakerRegistry registry) {
    return registry.circuitBreaker("longTermBreaker",
        CircuitBreakerConfig.custom()
            .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED)
            .failureRateThreshold(1)
            .slidingWindowSize(120)
            .waitDurationInOpenState(Duration.ofMinutes(2)) // open -> half open까지 기다리는 시간
            .automaticTransitionFromOpenToHalfOpenEnabled(true) // open 상태에서 자동으로 half open으로 전환
            .build()
    );
}


제가 궁금한 점은 slidingWindowType을 TIME_BASED로 했을 경우, slidingWindowSize에 들어가는 값의 단위가 초 단위인가 하는 것입니다.

 

공식 문서에는

이렇게 나와있는데 애매한 것 같아서요.

spring-boot msa circuit-breaker resilience4j

답변 2

1

이준형(Foo)

백종인님 안녕하세요~

 

찾아보신 것처럼, slidingWindowSize에 있는 값은 seconds가 맞습니다.

잘 찾아보셨어요.

 

그런데 질문과는 별개로, Riot API Limit에 나와있는 내용은 서킷브레이커보다는 Rate Limiter(https://resilience4j.readme.io/docs/ratelimiter)로 구현하는게 더 적절해보입니다. 서킷브레이커는 부하, 오류 상황으로부터 시스템을 지키는 목적이지 호출 횟수를 제한하려는 목적은 아닙니다. 물론 서킷브레이커로도 구현하신 것처럼 비슷하게 구현은 할 수 있을겁니다. 그러나 조금만 커스터마이징을 하려고 해도 로직을 직접 구현해주셔야해요. 아마 Rate Limiter로 개발하시면 이런 부분이 이미 구현되어있을겁니다.

 

아무튼 질문 주셔서 감사하고, 혹시 또 궁금한 내용 있으면 질문 남겨주세요~

1

백종인

circuit1.pngcircuit2.png

 

CircuitBreaker 내부 코드를 확인해본 결과 TIME_BASED일 경우 slidingWindowSize에 들어가는 데이터가 Seconds 단위로 들어가는 것 같은데 제가 제대로 확인한게 맞을까요?

코드 자료는 없는걸까요?

0

14

2

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

7

2

DLQ의 수동 커밋에 대해서 질문있습니다.

0

10

1

노션링크가 접근되지 않습니다.

0

13

1

h2 database

0

9

0

실무에서 동의어 정의 관련

0

19

2

Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?

0

32

2

소스 코드 좀 올려주세요.

0

31

1

스프링 부트 버전 질문

0

52

2

혹시 다음 강의는 언제쯤 나올까요?

0

23

1

현업에서 서킷브레이커 상태 전파를 할 때 Actuator를 사용 하시는지 궁금합니다!

1

125

1

recordException을 지정하지 않았을때 동작 방식 질문

0

171

3

Resilience4J 적절한 적용 예시인지 질문드립니다.

1

227

1

강의 자료 문의

1

328

2

scale out 환경에서 api 호출로 circuit 상태 변경하기

1

315

1

예외 선언 위치

0

295

1

Circuitbreaker 사용 주체

1

253

1

Retry 사용

1

269

1

slow call 관련 옵션을 무시할 수 있나요?

1

240

1

n 대의 서버간 서킷 브레이커의 상태를 동기화 시키려면 어떻게 해야 될까요?

1

546

1

안녕하세요 강사님 질문있습니다!

1

309

2

컨테이너 환경에서의 circuitbreaker 상태 전파 방식 질문

1

529

2

Circuit Breaker의 적용처 판단

1

454

2

IgnoreException 동작이 주석의 설명과 좀 다른것같습니다

1

382

1