본문 바로가기

MSA

37. 연쇄 장애 회피를 위한 CircuitBreaker

1. https://martinfowler.com/bliki/CircuitBreaker.html 참조

CircuitBreaker Closed는 다른 서비스가 정상적이라 서킷 브레이커가 작동을 하지 않는 상태

CircuitBreaker Open은 다른 서비스가 비 정상적이라 서킷 브레이커가 작동을 하는 상태

 

2. Netflix EOS 또는 유지보수 정체에 따른에 따른 모듈의 대체

Zuul -> Spring Cloud Gateway

Ribbon -> Spring Cloud Loadbalancer

Hystrix -> Resilience4j

Hystrix Dashboard / Turbine -> Micrometer + Monitoring System(Prometheus, Grafana)

 

3. Resilience4j

https://resilience4j.readme.io/docs/getting-started

 

Introduction

Resilience4j is a lightweight fault tolerance library designed for functional programming. Resilience4j provides higher-order functions (decorators) to enhance any functional interface, lambda expression or method reference with a Circuit Breaker, Rate Lim

resilience4j.readme.io

4. 장애상태의 micro service 연출(order-ms shutdown)

사용자 조회시 ORDER-MS의 Internal Error로 인한 호출서비스의 Response 연쇄 오류
호출한 micro service에서의 오류 메시지

5. Resilience4j 적용

5-1. dependency 추가

5-2. UserServiceImpl에 주입후 재기동

5-3. 서비스 호출후 확인

CircuitBreaker open에 의한 order-ms 장애시 orders항목이 empty arraylist로 반환
호출한 서비스에서는 오류가 발생한것은 동일하나 다른 서비스에 의해 원본 서비스도 연쇄장애를 회피할 수 있다

6. CircuitBreaker Config 적용

Resilience4JConfig 설정 class 생성