TIL

24.08.09 TIL - 서킷 브레이커 & Resilience4j

개발공명 2024. 8. 10. 03:29

 

오늘 배운 것

  • 서킷 브레이커
  • Resilience4j

 

서킷 브레이커란

  • 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다. 
  • 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리한다.
  • 장애를 격리해 시스템의 다른 부분에 영향을 주지 않도록 하는 것이다. 
  • 상태라는 것이 존재한다 (CLOSED, OPEN, HALF_OPEN)

 

서킷 브레이커는 검문소 같은 느낌 같다.

 

 

Resilience4j란

  • Resilience4j는 서킷 브레이커 라이브러리다.
  • 다양한 서킷 브레이커 기능을 제공한다. 
  • 서킷 브레이커 상태를 통해 호출 실패를 관리한다. 
  • Fallback이라는 호출 실패 시 대체 로직 제공해 시스템 안전성 확보
  • 모니터링 및 관리 가능한 도구 제공

 

Fallback이란

Fallback 메서드는 정상 동작 메서드가 실패했을 때 대체 로직을 제공하는 메서드다. 

 

정상 동작인 메서드가 있고 fallback 메서드가 있는 것이다. 

 

아래와 같이 사용한다. 

@CricuitBreaker(falllbackMethod = "fallback 메서드명")
public void 정상 동작 메서드명(){
	...
}

public void fallback 메서드명(){
	...
}

 

Fallback 메서드 장점

  • 시스템의 안정성 높임
  • 장애 발생해도 사용자에게 일정한 응답 제공 가능
  • 사용자들이 시스템의 안정성 높다고 생각하게 할 수 있음
  • 장애 다른 서비스에 전파 방

fallback 메서드로 우회 시키는 것

 

서킷 브레이커 상태

CLOSED

  • 기본 상태
  • 모든 요청 통과 시키는 상태
  • CLOSED 상태에서 호출 실패 시 실패 카운터 증가
  • 실패율 설정된 임계값 초과되면 OPEN 상태로 전환

 

OPEN

  • 서킷 브레이커가 동작하는 상태
  • 모든 요청 즉시 실패로 처리
  • 설정된 대기 시간 지나면 HALF_OPEN 상태로 전환

 

HALF_OPEN

  • OPEN 상태에서 어플리케이션이 다시 정상 상태로 복구 되었는지 확인 필요
  • 따라서 OPEN → HALF_OPEN 상태로 전환해 복구 확인하는 것
  • 제한된 수의 요청 허용해 어플리케이션이 정상 상태로 복구 되었는지 확인
    • 요청 성공 시 CLOSED 상태로 전환
    • 요청 다시 실패 시 다시 OPEN 상태로 전환

 

서킷 브레이커 동작 방식

  1. 요청이 들어와 정상 동작 메서드가 실행됨 (상태 = CLOSED)
  2. 정상 동작 메서드가 실패하며 실패 카운터가 증가 (상태 = CLOSED)
  3. 정상 동작 메서드 실패가 계속되어 실패율이 설정한 임계값을 넘어감 (상태 = OPEN)
  4. 요청이 들어와도 정상 동작 메서드가 아닌 fallback 메서드 실행됨 (상태 = OPEN)
  5. 설정한 시간이 지난 후 상태가 바뀌어 제한된 수의 요청 받음 (상태 = HALF_OPEN)
  6. 제한된 수의 요청이 들어와 정상 동작 메서드 실행함 (상태 = HALF_OPEN)
    1. 정상 동작 메서드가 성공함 (상태 = CLOSED)
    2. 정상 동작 메서드가 실패함 (상태 = OPEN)

 

 

정리

MSA이기 때문에 여러 어플리케이션 존재해서 한 어플리케이션에서의 오류가 다른 어플리케이션에 영향 줄 수 있기 때문서킷 브레이커로 장애 격리 시키는 것 같다. 

 

MSA를 구현하면서 이런 다양한 기술들이 있다는 것이 놀랍고 신기하다. 

 

Monolithic architecture를 MSA로 전환하면서 이런 기술들을 적용해보면 좋을 것 같다.