본문 바로가기
IT KNOWLEDGE/개발 방법론

MSA 장애 예방을 위한 Circuit Breaker(feat. Spring)

by BTC_조롱이 2022. 12. 2.

1. Test Source Code

1.1 main application



@EnableCircuitBreaker
Circuit breaker 사용을 위하여 EnableCircuitBreaker Annotation 추가합니다.
@EnableHystrixDashboard
HystrixDashboard 사용을 위하여 @EnableHystrixDashboard Annotation 추가합니다.

1.2. Service


Circuit breaker 적용하기 위해서 실 서비스 메서드 위에  
@HystrixCommand(fallbackMethod = “getFallback”) Annotation 정의하고,
Service 장애 시 호출한 fallback 메서드는 getFallback 메서드로 지정합니다.
앞서 정의한 Fallback은 getFallback() 메서드로 Circuit breaker 를 적용한 원래 함수와 입력/출력 인자가 동일합니다.


2. TEST Return Result 확인


2.1 정상 상태 리턴

2.2 비정상 상태 리턴 (Circuit Breaker 발생)

3. 모니터링을 통한 Circuit Breaker 동작 확인

 

3.1 모니터링

/actuator/hystrix.stream 통하여 메서드의 상태 현황 정보를 체크합니다.

 

3.2 Circuit Breaker 동작 확인

error count 와 request count 의 변화를 확인할 수 있습니다.


3.3 HystrixDashboard 로 Circuit Breaker 동작 확인

Circuit breaker가 등록된 서비스들이 모니터링 되며 실제 호출 시 정상 호출과 비정상 호출을 모니터링 할 수 있습니다.


결론

마이크로 서비스를 지향하는 서비스에서 각 서비스 간의 동기 호출로 인한 종속 관계 일 때 특정 서비스 장애 시 전체 서비스의 장애로 이어질 수 있습니다.

Circuit Breaker를 사용하여 특정 서비스 장애 시에도 동기 호출 리턴 값을 받아 서비스 간의 종속 관계와 상관없이 해당 서비스만 차단함으로써 전체 장애로 이어지는 것을 막을 수 있습니다.

MSA 마다 다르겠지만 전체 서비스로 장애를 확산 시킬 수 있는 마이크로 서비스에는 Circuit Breaker를 적용하여 장애 예방을 해보는 것도 하나의 방법이 될 수 있을 것 같습니다.


출처: https://blog.bespinglobal.com/post/msa-%ec%9e%a5%ec%95%a0-%ec%98%88%eb%b0%a9%ec%9d%84-%ec%9c%84%ed%95%b4-2%eb%b6%80/

댓글