Arquitecturas basadas en Microservicios: Spring Cloud Netflix Zuul

En entradas anteriores hemos visto qué son los microservicios y comó se integrarían componentes como Eureka en el desarrollo de los mismos. Es el turno de Spring Cloud Netflix Zuul, un componente más de Netflix OSS que nos ayuda en el proceso de enrutamiento y filtrado de nuestras peticiones.

¿Qué es Zuul?

Zuul, nuestra nueva herramienta, se puede definir como un proxy inverso o edge service que nos va a permitir tanto enrutar y filtrar nuestras peticiones de manera dinámica, como monitorizar y securizar las mismas.
Este componente actúa como un punto de entrada a nuestros servicios, es decir, se encarga de solicitar una instancia de un microservicio concreto a Eureka y de su enrutamiento hacia el servicio que queramos consumir.

¿Cuál es su funcionamiento?

Como hemos comentado anteriormente, Zuul será identificado como el punto de entrada al que llegarán todas nuestras peticiones, las cuales serán securizadas, balanceadas y enrutadas.
Nuestras peticiones pasarán de manera individual por cada uno de los filtros que componen nuestra configuración de Zuul. Estos filtros harán que nuestra petición sea rechazada por determinados motivos de seguridad en función de sus características, sea dirigida a la instancia del servicio que nos interesa o que sea etiquetada y registrada con la intención de ser monitorizada.
Aunque se hablará más detenidamente de estos componentes, no podemos explicar qué es Zuul sin mencionar a Hystrix y Ribbon.

Hystrix y Ribbon

Ambas herramientas están disponibles desde el momento en el que configuras tu servidor de Zuul. La primera es una librería que nos proporcioná ciertas utilidades enfocadas a la tolerancia a fallos y resiliencia de nuestros microservicios; y la segunda, Ribbon, un balanceador de carga, que entre otras cosas, ayudara a Zuul a localizar las instancias de los servicios que han sido descubiertos por Eureka.

¿Cuáles son las ventajas de Zuul?

En la siguiente tabla, podemos ver las ventajas que trae consigo:

Ventajas de Zuul
Dispone de varios filtros enfocados a gestionar diferentes situaciones
Transforma nuestro sistema en uno más ágil, capaz de reaccionar de manera más rápida y eficaz
Puede encargarse de gestionar la autenticación de manera general al ser nuestro punto de entrada al ecosistema
Es capaz de realizar el despliegue de filtros en caliente, de manera que podríamos realizar pruebas sobre nuevas funcionalidades sin parar la aplicación

¿Cómo es la configuración de Zuul?

La configuración de nuestra herramienta es bastante sencilla. Basta con anotar nuestra aplicación principal de Spring Boot con la anotación @EnableZuulProxy y añadir una serie de propiedades a nuestro fichero properties.yml:


Tenemos varios parámetros, pero básicamente lo que le estamos diciendo a nuestro edge-service es dónde debe dirigir las peticiones que le lleguen con un determinado path. Es decir, en este caso, todas las peticiones que lleguen precedidas por /serviceA/** serán enrutadas a nuestro microservicio service-a, el cual está alojado en el puerto 7010 de nuestro localhost.
Lo mismo ocurrirá con las peticiones que vengan de parte de /serviceB/**, y así con todos los microservicios que tengamos alojados en nuestro ecosistema.
Se puede observar cómo hemos definido una propiedad server.port:7030. Esto nos indica que todas las peticiones que se ejecuten en nuestros microservicios llegarán por http://localhost:7030/**

En resumen, si queremos una herramienta que nos ayude a aislar los distintos puntos de entrada a nuestros ecosistemas, nos proporcione un buen sistema de filtrado de peticiones y en general, nos ayude a que nuestros desarrollos sean más robustos y resilientes, Zuul es nuestra herramienta.

Referencias

   Netflix – Zuul      Spring Cloud Netflix