오늘 배운 것
- 서킷 브레이커
- Resilience4j
서킷 브레이커란
- 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다.
- 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리한다.
- 장애를 격리해 시스템의 다른 부분에 영향을 주지 않도록 하는 것이다.
- 상태라는 것이 존재한다 (CLOSED, OPEN, HALF_OPEN)
Resilience4j란
- Resilience4j는 서킷 브레이커 라이브러리다.
- 다양한 서킷 브레이커 기능을 제공한다.
- 서킷 브레이커 상태를 통해 호출 실패를 관리한다.
- Fallback이라는 호출 실패 시 대체 로직 제공해 시스템 안전성 확보
- 모니터링 및 관리 가능한 도구 제공
Fallback이란
Fallback 메서드는 정상 동작 메서드가 실패했을 때 대체 로직을 제공하는 메서드다.
정상 동작인 메서드가 있고 fallback 메서드가 있는 것이다.
아래와 같이 사용한다.
@CricuitBreaker(falllbackMethod = "fallback 메서드명")
public void 정상 동작 메서드명(){
...
}
public void fallback 메서드명(){
...
}
Fallback 메서드 장점
- 시스템의 안정성 높임
- 장애 발생해도 사용자에게 일정한 응답 제공 가능
- 사용자들이 시스템의 안정성 높다고 생각하게 할 수 있음
- 장애 다른 서비스에 전파 방지함
서킷 브레이커 상태
CLOSED
- 기본 상태
- 모든 요청 통과 시키는 상태
- CLOSED 상태에서 호출 실패 시 실패 카운터 증가
- 실패율 설정된 임계값 초과되면 OPEN 상태로 전환
OPEN
- 서킷 브레이커가 동작하는 상태
- 모든 요청 즉시 실패로 처리
- 설정된 대기 시간 지나면 HALF_OPEN 상태로 전환
HALF_OPEN
- OPEN 상태에서 어플리케이션이 다시 정상 상태로 복구 되었는지 확인 필요
- 따라서 OPEN → HALF_OPEN 상태로 전환해 복구 확인하는 것
- 제한된 수의 요청 허용해 어플리케이션이 정상 상태로 복구 되었는지 확인
- 요청 성공 시 CLOSED 상태로 전환
- 요청 다시 실패 시 다시 OPEN 상태로 전환
서킷 브레이커 동작 방식
- 요청이 들어와 정상 동작 메서드가 실행됨 (상태 = CLOSED)
- 정상 동작 메서드가 실패하며 실패 카운터가 증가 (상태 = CLOSED)
- 정상 동작 메서드 실패가 계속되어 실패율이 설정한 임계값을 넘어감 (상태 = OPEN)
- 요청이 들어와도 정상 동작 메서드가 아닌 fallback 메서드 실행됨 (상태 = OPEN)
- 설정한 시간이 지난 후 상태가 바뀌어 제한된 수의 요청 받음 (상태 = HALF_OPEN)
- 제한된 수의 요청이 들어와 정상 동작 메서드 실행함 (상태 = HALF_OPEN)
- 정상 동작 메서드가 성공함 (상태 = CLOSED)
- 정상 동작 메서드가 실패함 (상태 = OPEN)
정리
MSA이기 때문에 여러 어플리케이션 존재해서 한 어플리케이션에서의 오류가 다른 어플리케이션에 영향 줄 수 있기 때문에 서킷 브레이커로 장애 격리 시키는 것 같다.
MSA를 구현하면서 이런 다양한 기술들이 있다는 것이 놀랍고 신기하다.
Monolithic architecture를 MSA로 전환하면서 이런 기술들을 적용해보면 좋을 것 같다.
'TIL' 카테고리의 다른 글
24.08.13 TIL - Docker (0) | 2024.08.16 |
---|---|
24.08.12 TIL - MSA 구성 요소들 (2) | 2024.08.13 |
24.08.08 TIL - 스프링 소셜 로그인 코드 리팩토링 (0) | 2024.08.09 |
24.08.07 TIL - C++ 코딩 테스트 유용한 함수들 (0) | 2024.08.08 |
24.08.06 TIL - MSA (0) | 2024.08.06 |