반응형

 

 

의존성


 

dependencies {
    implementation 'io.github.resilience4j:resilience4j-spring-boot3:2.2.0'
    implementation 'org.springframework.boot:spring-boot-starter-aop'
}

 

 

서킷브레이커 


 

마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다. 

 

외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 한다. 

 

상태 변화 : 클로즈드 -> 오픈 -> 하프-오픈 

 

 

Reilience4j


 

서킷 브레이커 라이브러리로, 서비스 간의 호출 실패를 감지하고 시스템의 안정성을 유지한다. 

 

다양한 서킷 브레이커 기능을 제공하며, 장애 격리 및 빠른 실패를 통해 복원력을 높인다. 

 

 

Reilience4j 주요 특징 


 

서킷브레이커 상태 : 클로즈드 -> 오픈 -> 하프-오픈

 

클로즈드 

기본 상태로, 모든 요청을 통과 시킨다. 

이 상태에서 호출이 실패하면 실패 카운터가 증가한다. 

실패율이 설정된 임계값(예:50%)을 초과하면 서킷 브레이커가 오픈 상태로 전환된다. 

 

오픈

서킷 브레이커가 오픈 상태로 전환되면 모든 요청을 즉시 실패로 처리한다. 

이 상태에서 요청이 실패하지 않고 바로 에러 응답을 반환한다. 

설정된 대기 시간이 지난 후, 서킷 브레이커는 하프-오픈 상태로 전환됩니다. 

오픈 상태로 전환되고 설정된 시간동안 모든 요청이 차단됩니다. 

 

하프-오픈 

오픈 상태에서 대기 시간이 지나면 서킷 브레이커는 하프-오픈 상태로 전환된다. 

하프-오픈 상태에서는 제한된 수의 요청을 허용하여 시스템이 정상 상태로 복구되었는지 확인합니다. 

요청이 성공하면 서킷 브레이커는 클로즈드 상태로 전환됩니다. 

요청이 다시 실패하면 서킷 브레이커는 다시 오픈 상태로 전환됩니다. 

하프-오픈 상태에서 3개의 요청을 허용하고, 모두 성공하면 클로즈드 상태로 전환되고, 만약 하나라도 실패하면 다시 오픈 상태로 전환됩니다. 

 

 

Fallback : 호출 실패 시 대체 로직을 제공하여 시스템 안정성을 확보합니다. 

 

모니터링 : 서킷 브레이커 상태를 모니터링하고 관리할 수 있는 다양한 도구를 제공합니다. 

 

 

코드


 

application.yml

resilience4j:
  circuitbreaker:
    configs:
      default:
        register-health-indicator: true
        sliding-window-type: COUNT_BASED
        sliding-window-size: 5
        minimum-number-of-calls: 5
        slow-call-rate-threshold: 100
        slow-call-duration-threshold: 60000
        failure-rate-threshold: 50
        permitted-number-of-calls-in-half-open-state: 3
        wait-duration-in-open-state: 20s

 

register-health-indicator : 애플리케이션의 헬스 체크에 서킷 브레이커 상태를 추가하여 모니터링 가능

 

sliding-window-type : 서킷 브레이커가 도작할 때 사용할 슬라이딩 윈도우의 타입을 설정한다. 

- COUNT_BASED 마지막 N번의 호출 결과를 기반으로 상태를 결정.

- TIME_BASED 마지막 N초 동안의 호출 결과를 기반으로 상태를 결정 

 

sliding-window-size : 슬라이딩 윈도우의 크기를 설정한다. 

- COUNT_BASED일 경우 최근 N번의 호출을 저장하고, 

- TIME_BASED일 경우에는 최근 N초 동안의 호출을 저장한다. 

 

minimum-number-of-calls : 서킷 브레이커가 동작하기 위해 필요한 최소한의 호출 수를 설정한다. 

 

slow-call-rate-threshold : 느린 호출의 비율이 이 임계값을 초과하면 서킷 브레이커가 동작한다. 

 

slow-call-duration-threshold : 느린 호출의 기준 시간(밀리초)으로, 설정한 시간 이상 걸리면 느린 호출로 간주한다. 

 

failure-rate-threshold : 실패율이 이 임계값 설정을 초과하면 서킷 브레이커가 동작한다. 

 

permitted-number-of-calls-in-half-open-state : 서킷 브레이커가 Half-open 상태에서 허용되는 최대 호출 수를 설정값만큼 설정한다. 

 

wait-duration-in-open-state : Open 상태에서 Half-open 상태로 전환되기 전에 대기하는 시간을 20초로 설정한다. 

 

 

Fallback


 

외부 서비스 호출이 실패했을 때 대체 로직을 제공하는 메서드. 

 

 

Fallback 장점 


 

시스템의 안정성을 높이고, 장애가 발생해도 사용자에게 일정한 응답을 제공할 수 있다.

 

장애가 다른 서비스에 전파되는 것을 방지한다. 

 

 

Resilience4j DashBoard


 

Prometheus와 Grafana를 사용하여 Resilence4j 서킷 브레이커의 상태를 실시간으로 모니터링할 수 있습니다. 

 

Prometheus를 통해 수집된 메트릭을 Grafana 대시보드에서 시각화할 수 있습니다. 

 

728x90
반응형