MSA 장애 예방을 위해 #2



2부 에서는 간단한 Spring Code 를 통해 Circuit Breaker 사용 방법을 알아 보겠습니다.



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를 적용하여 장애 예방을 해보는 것도 하나의 방법이 될 수 있을 것 같습니다.



참고자료