Resilience4j - 서킷브레이커

런던행·2023년 6월 30일
0

스프링부트

목록 보기
4/4

서킷 브레이커의 주요 기능은 다음과 같다.

  • 다량의 오류를 감지하면 서킷을 열어 새 호출을 받지 않는다.
  • 서킷 브레이커는 서킷이 열려 있을 때 빠른 실패로직을 수행한다. 즉 이어지는 호출에서 시간 초과 등으로 말미암은 새로운 오류가 발생하지 않게 하며, fallback method로 호출을 리디렉션한다. 폴백 메서드에 다양한 비즈니스 로직을 적용하면 로컬 캐시의 데이터를 반환하거나 즉각적인 오류 메시지를 반환하는 등의 최적화된 응답을 생성 할 수 있다. 이는 고부하 상황에서 특히 유용하다.
  • 시간이 지나면 서킷 브레이커는 반열림 상태로 전환돼 새로운 호출을 허용하며, 이를 통해 문제를 일으킨 원인이 사라졌는지 확인한다. 새로운 오류를 감지하면 서킷을 다시 열고 빠른 실패 로직을 다시수행하며, 오류가 사라졌으면 서킷을 닫고 정상 작동 상태로 돌아간다.

런타임에 다양한 방법으로 서킷 브레이커의 정보를 공개한다.

  • 서킷브레이커 현재 상태는 actuator/health (상태정ㅁ검 엔드포인트)를 사용해 모니터링 할 수 있다.
  • 서킷 브레이커는 상태 전이 등의 이벤트를 /actuator/circuitbreakerevents에 게시한다.
  • 서킷 브레이커는 스프링 부트의 메트릭 시스템과 통합돼 있으며, 이를 이용해 프로메테우스와 같은 모니터링 도구에 메트릭을 게시할 수 있다.

구성매개변수

  • ringBufferSizeInclosedState: 닫힌 상태에서의 호출 수로, 서킷을 영어야 할지 결정한다.
  • failureRateThreashold: 실패한 호출에 대한 임계값으로 이 값을 초과하면 서킷이 열린다.
  • waitInterval: 반열림 상태로 전환하기 전에 서킷을 열린 상태로 유지하는 시간
  • ringBufferSizeInHalfOpenState: 반열림 상태에서의 호출 수로, 서킷을 다시 열거나 닫힘 상태로 돌아갈지를 결정할 때 사용한다.
  • automaticTransitionFromOpenToHalfOpenEnabled: 대기시간이 지난 후에 서킷을 반열림 상태로 자동 전환할지, 첫 번째 호출이 들어오길 기다렸다가 반열림 상태로 전환할지 결정
  • ignoreExceptions: 오류로 간주하지 않을 예외를 지정한다.

다음 설정을 사용해보자

  • ringBufferSizeInClosedState = 5, failureRateThreashold = 50%: 마지막 5개의 호출 중 3개이상이 실패하면 서킷이 열린다.
  • waitInterval = 10000, automaticTransitionFromOpenToHalfOpenEnabled = true;
  • 서킷 브레이커는 10초 동안 서킷을 열린 상태로 유지했다가 반열림 상태로 전환한다.
  • ringBufferSizeInHalfOpenState = 3 : 반열림 상태로 전환된 후에 처음 유입된 3개의 호출을 기준 삼아 서킷의 열림 여불르 결정한다. failureRateThreashold 이미 50% 설정되어 있기에 2개 이상의 호출이 실패하면 다시 열린다.

ref : 스프링으로 하는 마이크로서비스 구축

profile
unit test, tdd, bdd, laravel, django, android native, vuejs, react, embedded linux, typescript

0개의 댓글