2024-08-01 MSA (Microservices Architecture) - 6

목표
- Circuit Breaker에 대해 이해한다.
- Resilience4j와 Fallback Method를 이용하여 실습을 진행한다.
Circuit Breaker
- 마이크로서비스 간의 호출 실패를 감지하고 시스템의 전체적인 안정성을 유지하는 패턴이다.
- 외부 서비스 호출 실패 시 빠른 실패를 통해 장애를 격리하고, 시스템의 다른 부분에 영향을 주지 않도록 한다.
Circuit Breaker 상태 변화
1. Closed 상태
- 모든 요청이 정상적으로 서비스에 전달된다.
- 만약 연속적으로 요청이 실패하면 실패 카운터가 증가하며, 이 값이 일정 임계값에 도달하면 Open 상태로 전환된다.
2. Open 상태
- 모든 요청이 즉시 실패하여 서비스를 호출하지 않고, 실패 응답을 즉시 반환한다.
- 이 상태는 회복 시간을 부여하여, 장애가 있는 서비스가 복구될 시간을 주기 위해 사용된다. 일정 시간이 지나면 Half-Open 상태로 전환된다.
3. Half-Open 상태
- 제한된 수의 요청을 허용하여 서비스가 복구되었는지를 테스트하는 상태이다.
- 만약 요청이 성공하면 회로는 다시 Closed 상태로 돌아가며, 그렇지 않은 경우 Open 상태로 돌아간다.
Resilience4j
- Circuit Breaker 라이브러리로서, 서비스 간의 호출 실패를 감지하고 시스템의 안정성을 유지한다.
1. Fallback
- 서비스 호출이 실패했을 때 실행되는 대체 로직이다.
2. Resilience4j Dashboard
- 서킷 브레이커의 상태를 모니터링할 수 있다.
실습
- 강의 내용에 따라 코드를 작성한다.
- Fallback Method는 [그림 1]에서처럼 @CircuitBreaker의 'fallbackMethod' attribute 값을 지정하여 만들 수 있다.
- productId 값이 "111"인 요청을 보냈을 때 Fallback Method가 호출되도록 하였다.
[그림 1] - Fallback Method defined in ProductService

[그림 2] - Product object (Fallback Method not called)

[그림 3] - Product object (Fallback Method called)

- 비정상적인 요청을 보낸 이후 일정 시간동안 정상적인 요청을 보내도 계속 Fallback Method가 호출되는 상태가 되며, 일정 시간이 지나면 해당 상태는 해제된다.
참고 블로그 1 - https://mangkyu.tistory.com/261