Spring Cloud: Turbina

S

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 puerto 8070.
  • Servicio al usuario: Un servicio REST simple que tiene un único punto final de /personalized/{id} y corriendo en el puerto 8060.
  • 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.streams 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.streams.

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 serviceIds 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.

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad