서킷브레이커는 뭐고 왜 써야 하는지 짧게 정리한 글입니다.
서킷 브레이커 왜 사용 할까?
Circuit Breaker 직역하자면 회로 차단기라는 뜻을 가지고 있습니다.
MSA환경에서는 서비스들이 모듈로 분리되고, 요청 서비스와 응답 서비스가 있습니다.
서비스 A가 서비스 B를 호출 했을 때, 서비스 B의 상태가 비정상적이라 응답을 해줄 수 없는 경우
서비스 A는 서비스 B의 응답을 계속해서 기다리는 상태가 됩니다.
서비스 B의 장애가 서비스 A까지 전파될 수 있습니다. 이를 방지하기 위해서 서킷 브레이커를 사용합니다.
대표적인 서킷브레이커 라이브러리로는 Resilience4J가 있습니다. 요청 서비스와 제공 서비스사이에 Resilice4J를 두고 통신합니다.
서킷브레이커 패턴
서킷브레이커 패턴은 서비스 A와 서비스 B사이에 서킷브레이커를 두어 서비스 B로 전달되는 요청이 서킷브레이커를 통해 전달되도록 하는 패턴 입니다.
서비스 B가 정상적이라면 서킷브레이커는 서비스 A의 요청을 바이패스하여 서비스 B로 전달해 줍니다.
서비스 B가 비정상적이라면 이를 서킷브레이커가 감지하여 서킷브레이커에서 서비스 A의 호출을 끊습니다.
이러한 경우 서비스 A로 서비스 B의 장애가 전파 되지는 않지만, 정상적인 응답값을 받지 못하게 됩니다.
이러한 처리를 하기 위해 사용되는 것이 Fallback Messaging 입니다. 서비스 B가 정상적으로 응답을 할 수 없는 경우 서킷 브레이커에서 Fallback Messaging을 통해 정해진 룰대로 값을 응답합니다.
결론
- MSA에서 모듈간의 장애전파를 막기 위해 서킷브레이커 패턴이 사용된다.
- 장애 발생시 처리를 위해 FallbackMessaging이 사용되고, 서킷브레이커에서 장애 시 정해진 값을 응답 해 줄 수 있다.
- 자바의 대표적인 서킷브레이커 라이브러리로는 Resilience4J가 있다.
'study' 카테고리의 다른 글
Spring에서 X-Forwarded-For 값을 가져오는 2가지 방법 (2) | 2022.05.22 |
---|---|
Spring AOP - Transactional, Async (0) | 2022.03.25 |
[Java]LocalDateTime, OffsetDateTime, ZonedDateTime, Instant (0) | 2022.03.16 |
[Java]컬렉션(Collections) 정리 (0) | 2021.12.02 |
[Spring]프로토타입과 스코프 (0) | 2021.12.02 |