Nube de primavera: turbina

En este artículo, le presentaremos Spring Cloud Netflix Turbine. Agrega múltiples Hystrix Metrics Streams en uno, para que pueda mostrarse en...

Visión general

En este artículo te presentamos la Turbina de Netflix Nube Primaveral. Agrega múltiples flujos de métricas de Hystrix en uno, para que pueda mostrarse en una sola vista de tablero.

Para dar una pequeña introducción a Hystrix. En una arquitectura de microservicios, 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 fallas en cascada, configuramos un mecanismo de respaldo de Hystrix para nuestros microservicios.

Cada microservicio que implementa Hystrix puede optar por exponer los Hystrix Metrics Streams (a través del punto final del actuador /hystrix.stream) que se pueden ver a través del Hystrix Dashboard.

Hemos cubierto esto en detalle en Nube de primavera: Hystrix si quieres aprender más.

Turbina es una herramienta de código abierto de Netflix para agregar varias transmisiones en una sola transmisión. Spring proporcionó un buen envoltorio a su alrededor para que se usara fácilmente en el ecosistema de Spring.

Configuración

La configuración es similar a la configuración 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 punto final único de /recomendaciones y se ejecuta en el puerto 8070.
  • Servicio de usuario: un servicio REST simple que tiene un punto final único de /personalizado/{id} y se ejecuta en el puerto 8060.
  • Hystrix Turbine: un servicio de tablero de Hystrix para mostrar flujos de Hystrix que se ejecutan en el puerto 9090.

Here is what our services look like on the servidor eureka:

spring-cloud-turbine-setup

Tanto el ‘servicio de usuario’ como el ‘servicio de recomendación’ han implementado el mecanismo de respaldo de Hystrix y tienen el punto final ‘/hystrix.stream’ expuesto a través de [Solenoide] (https://docs.spring.io/spring-boot/docs /current/reference/html/production-ready-endpoints.html):

  • Punto final 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 comprobar ambos individualmente en nuestro panel Hystrix escribiendo la URL en el cuadro y haciendo clic en "Monitor Stream":

panel-turbina-spring-cloud

Veremos una métrica como esta:

spring-cloud-turbine-dashboard-single-stream

Nota: si no ve ninguna transmisión, probablemente deba acceder a los puntos finales del servicio cuya transmisión desea ver. Ej: para user-service tenemos que presionar http://localhost:8060/personalized/1 para generar la transmisión.

Instalación de turbina {#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.

Turbine puede agregar todos estos ‘hystrix.stream’ individuales en un solo ’turbine.stream’, que se puede ver en Hystrix Dashboard.

Utiliza la interfaz DiscoveryClient para encontrar servicios relevantes que producen /hystrix.streams.

Para agregar Turbine a su Hystrix Dashboard, agregue la siguiente dependencia:

1
2
3
4
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>

Nota: Esta es una dependencia de inicio de la turbina, que por defecto usa Spring Cloud Eureka como servidor de descubrimiento. Si usa Spring Cloud Consul, use las siguientes dependencias:

1
2
3
4
5
6
7
8
<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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
@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, debemos agregar algunos detalles a nuestras application.propeties:

1
2
3
4
5
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, las aplicaciones cuyo ‘/hystrix.stream’ necesita obtener y ’turbine.clusterNameExpression’ como ’nueva cadena (“predeterminada”)’, lo que da el nombre de clúster de "predeterminado\ “.

Podemos abrir http://localhost:9090/turbine.stream?cluster=default para ver el flujo agregado de user-service y recommendation-service:

turbina-nube-de-primavera

Nuevamente, si no está viendo nada, simplemente presione los puntos finales user-service y recommendation-service para generar las transmisiones.

También podemos usar esta URL en nuestro panel Hystrix para generar una buena vista agregada:

spring-cloud-turbine-stream-in-dashboard

A veces, es posible que desee utilizar los serviceIds de Eureka como nombres de clúster para su tablero. Esto se puede hacer usando turbine.aggregator.clusterConfig:

1
2
3
4
5
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 punto final /clusters.

Este punto final se puede deshabilitar configurando turbine.endpoints.clusters.enabled en false.

spring-cloud-turbine-cluster-endpoint

Entonces, ahora podemos ver turbine.stream como ID de Eureka como: http://localhost:9090/turbine.stream?cluster=USER-SERVICE

spring-cloud-turbine-service-id-cluster

Si hay varias instancias de un servicio en particular en ejecución, Turbine lo seleccionará según el clúster y lo mostrará en el resultado.

Conclusión

En este artículo, hemos cubierto cómo configurar la turbina en la parte superior de nuestra transmisión Hystrix para obtener una vista agregada. Primero vimos el enfoque clásico de Turbine de obtener el flujo de Hystrix de todos los servicios.

Como siempre, el código de los ejemplos utilizados en este artículo se puede encontrar en GitHub.