터빈 서버란 ?
마이크로서비스에 설치된 히스트릭스 (Hystrix) 클라이언트 스트림 메시지를 터빈 서버로 통합하여 관리한다.
히스트릭스 클라이언트 스트림이란, 마이크로서비스에 설치된 ‘히스트릭스 클라이언트’ 에서 서비스 처리 요청에 대한 결괏값을 스트림으로 전달해준다. 사용자는 이를 통해 서비스가 잘 돌아갔는 지 확인할 수 있게 된다.
터빈 서버 구축하기
터빈 서버를 마이크로서비스에 등록하기 위해서는, 먼저 터빈 서버를 생성하고 build.gradle
에 아래 라이브러리를 추가해준다.
implementation 'org.springframework.cloud:spring-cloud-starter-netflix-turbine'
터빈 서버의 application.yml
을 보면 아래와 같다.
server:
port: 9999
spring:
application:
name: msa-architecture-turbine-server
# Turbine Server
turbine:
appConfig: msa-service1, msa-service2, msa-service3
clusterNameExpression: new String("default")
세 개의 마이크로 서비스에 대한 애플리케이션 이름을 appConfig
속성에 적어주면 이 서비스에 대한 히스트릭스 클라이언트 스트림 메시지를 수집할 수 있다.
애플리케이션에서 @EnableTurbine
어노테이션을 붙여서 간단하게 터빈 서버를 동작시킬 수 있다.
@SpringBootApplication
@EnableTurbine
public class TurbineServerApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication.class, args);
}
}
터빈 서버의 포트 넘버는 9999이므로, [localhost:9999/turbine.stream
을 조회하면 마이크로서비스에서 생성되는 스트림 메시지를 한눈에 확인할 수 있다.
마이크로서비스 개발 시 적용법
(1) 애플리케이션에 @EnableCircuitBreaker
어노테이션 붙이기
@SpringBootApplication
@EnableCircuitBreaker
public class MemberApplication {
public static void main(String[] args) {
SpringApplication.run(MemberApplication.class, args);
}
}
Circuit Breaker가 뭔가요 ?
컴포넌트끼리 호출을 하는 MSA 환경 특성 상 서버가 서로 종속적이기 때문에, 요청에 대한 응답 시간이 길어지는 한계가 있다.
이 경우, 위와 같이 Circuit Breaker를 두어 서버 간의 호출을 통제하게 되는 것이다. 만약 Server B에서 응답이 없는 경우에 Circuit Breaker에서 Server A에게 에러 메시지를 보내거나, Fall-back message
와 같이 의미있는 메시지를 보낼 수 있다.
이 Circuit Breaker 패턴을 이용하는 방법 중 하나가 히스트릭스 클라이언트 스트림 메시지 기법이다.
(2) REST API에 @HystrixCommand
어노테이션 붙이기
Controller에서 만든 함수 위에 이 어노테이션을 붙여주면, 스트림 메시지를 터빈 서버가 수집해서 히스트릭스 대시보드에 전달하여 모니터링된다.