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를 적용하여 장애 예방을 해보는 것도 하나의 방법이 될 수 있을 것 같습니다.
참고자료
- https://bcho.tistory.com/1250
- https://medium.com/@jegasingamjeyanthasingam/circuit-breaker-pattern-for-microservices-eb71569dc44d
- https://medium.com/nerd-for-tech/design-patterns-for-microservices-circuit-breaker-pattern-ba402a45aac2