Visi贸n general
En este art铆culo, te presentaremos Turbina Spring Cloud Netflix. Eso agrega m煤ltiples flujos de m茅tricas de Hystrix en uno, para que pueda mostrarse en una sola vista del panel.
Para dar una peque帽a introducci贸n a Hystrix. En una arquitectura de microservicio, tenemos muchas aplicaciones peque帽as que se comunican entre s铆 para completar una solicitud.
Siempre existe la posibilidad de que uno de estos servicios posteriores no responda correctamente o simplemente falle por completo. Para evitar cualquier falla en cascada, configuramos un mecanismo de respaldo de Hystrix para nuestros microservicios.
Cada microservicio que implementa Hystrix puede optar por exponer los flujos de m茅tricas de Hystrix (a trav茅s del punto final del actuador /hystrix.stream
) que se puede ver a trav茅s del panel de Hystrix.
Hemos cubierto esto en detalle en Spring Cloud: Hystrix si desea obtener m谩s informaci贸n.
Turbina es una herramienta de c贸digo abierto de Netflix para agregar m煤ltiples transmisiones en una sola transmisi贸n. Spring proporcion贸 una envoltura agradable a su alrededor para que se pueda usar f谩cilmente en el ecosistema de Spring.
Preparar
La configuraci贸n es similar a la de Spring Cloud: Hystrix. As铆 es como se ve nuestro servicio de back-end:
- Servidor Eureka: Act煤a como un registro de servicios y se ejecuta en el puerto
8761
. - Servicio de recomendaci贸n: Un servicio REST simple que tiene un 煤nico punto final de
/recommendations
y corriendo en el puerto8070
. - Servicio al usuario: Un servicio REST simple que tiene un 煤nico punto final de
/personalized/{id}
y corriendo en el puerto8060
. - Turbina Hystrix: Un servicio de panel de Hystrix para mostrar las transmisiones de Hystrix que se ejecutan en el puerto.
9090
.
As铆 es como se ven nuestros servicios en el servidor de Eureka:
Ambos user-service
y recommendation-service
han implementado el mecanismo de reserva de Hystrix y tienen la /hystrix.stream
punto final expuesto a trav茅s de Solenoide:
- Punto final de Hystrix para servicio de usuario:
http://localhost:8060/actuator/hystrix.stream
- Punto final de Hystrix para el servicio de recomendaci贸n:
http://localhost:8070/actuator/hystrix.stream
Podemos verificar ambos esto individualmente en nuestro Panel de Hystrix escribiendo la URL en el cuadro y haciendo clic en “Monitor Stream”:
Veremos una m茅trica como esta:
Nota: Si no ve ninguna transmisi贸n, probablemente tenga que acceder a los puntos finales del servicio cuya transmisi贸n desea ver. Ej: parauser-service
tenemos que golpear http://localhost:8060/personalized/1
para generar la secuencia.
Instalaci贸n de turbina
Es posible que se haya dado cuenta de que mirar el flujo individual no es muy productivo, especialmente cuando tenemos muchos microservicios.
La turbina puede agregar todos estos hystrix.stream
s a un solo turbine.stream
, que se puede ver en el panel de Hystrix.
Utiliza el DiscoveryClient
interfaz para descubrir los servicios relevantes que producen /hystrix.stream
s.
Para agregar Turbine a su Hystrix Dashboard, agregue la siguiente dependencia:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
Nota: Esta es una dependencia inicial de la turbina, que de forma predeterminada utiliza Spring Cloud Eureka como servidor de descubrimiento. Si est谩 utilizando Spring Cloud Consul, use las siguientes dependencias:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
En este art铆culo usaremos la dependencia de inicio, es decir spring-cloud-starter-netflix-turbine
.
Para habilitar Turbine, simplemente anotamos nuestra clase principal con @EnableTurbine
:
@SpringBootApplication
@EnableTurbine
@EnableDiscoveryClient
@EnableHystrixDashboard
public class HystrixTurbineApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixTurbineApplication.class, args);
}
}
Para que Turbine funcione como se esperaba, tenemos que agregar algunos detalles a nuestro application.propeties
:
server.port= 9090
spring.application.name= hystirx-turbine
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
turbine.appConfig= user-service,recommendation-service
turbine.clusterNameExpression= new String("default")
Aqu铆, le estamos diciendo a Turbine la ubicaci贸n del servidor Eureka, aplicaciones cuyo /hystrix.stream
necesita ir a buscar y turbine.clusterNameExpression
como new String("default")
, que da el nombre del cl煤ster “predeterminado”.
Podemos abrirnos http://localhost:9090/turbine.stream?cluster=default
para ver el flujo agregado de ambos user-service
y recommendation-service
:
Nuevamente, si no est谩 viendo nada, simplemente presione el user-service
y recommendation-service
puntos finales para generar los flujos.
Tambi茅n podemos usar esta URL en nuestro panel de Hystrix para generar una buena vista agregada:
A veces, es posible que desee utilizar Eureka serviceId
s como nombres de cl煤ster para su panel. Esto se puede hacer usando turbine.aggregator.clusterConfig
:
server.port= 9090
spring.application.name= hystirx-turbine
eureka.client.serviceUrl.defaultZone= http://localhost:8761/eureka/
turbine.aggregator.clusterConfig= USER-SERVICE,RECOMMENDATION-SERVICE
turbine.appConfig= user-service,recommendation-service
Tambi茅n puede verificar qu茅 cl煤steres est谩n configurados actualmente en su aplicaci贸n Turbine presionando el /clusters
punto final.
Este punto final se puede deshabilitar configurando turbine.endpoints.clusters.enabled
a false
.
Entonces, ahora podemos ver turbine.stream
como ID de Eureka como: http://localhost:9090/turbine.stream?cluster=USER-SERVICE
Si hay varias instancias de un servicio en particular en ejecuci贸n, Turbine lo recoger谩 por cl煤ster y lo mostrar谩 en el resultado.
Conclusi贸n
En este art铆culo, hemos cubierto c贸mo configurar la turbina sobre nuestra transmisi贸n Hystrix para una vista agregada. Primero vimos el enfoque cl谩sico de Turbine de obtener la transmisi贸n Hystrix de todos los servicios.
Como siempre, el c贸digo de los ejemplos utilizados en este art铆culo se puede encontrar en GitHub.