Spring Cloud: Turbina

    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.

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *