Arquitecturas basadas en microservicios: Spring Cloud Netflix Eureka

El propósito de esta entrada es una sencilla introducción para explicar y familiarizarse con sencillos conceptos sobre los microservicios, en este caso sobre Spring Cloud Netflix Eureka, un pilar importante en la arquitectura orientada a microservicios.

Spring Cloud Netflix Eureka

¿Qué es?

Eureka es un servicio REST, utilizándose principalmente en la nube de AWS, a la cuál está estrechamente ligado. Eureka se comporta como servidor, cuyo objetivo es registrar y localizar microservicios existentes, informar de su localización, su estado y datos relevantes de cada uno de ellos. Además, nos facilita el balanceo de carga y tolerancia a fallos.
Por último, añadir que gracias a Spring Cloud Netflix, nos proporciona una fácil integración con el proyecto Netflix OSS (Open Source Software) para aplicaciones Spring Boot.

¿Cómo funciona?

Lo primero es entender que un microservicio debe definirse como un cliente de Eureka. Una vez aclarado este detalle, vamos a explicar su funcionamiento.

Cuando un microservicio arranca, se comunicará con el servidor Eureka para notificarle que está disponible para ser consumido. El servidor Eureka mantendrá la información de todos los microservicios registrados y su estado. Cada microservicio le notificará su estado mediante heartbeats cada 30 segundos.
Si pasados tres periodos heartbeats no recibe ninguna notificación del microservicio, lo eliminará de su registro. Al igual que si después de sacarlo del registro recibe tres notificaciones, entenderá que ese microservicio vuelve a estar disponible.

Cada cliente o microservicio puede recuperar el registro de otros microservicios registrados y quedará cacheado en dicho cliente. Además, Eureka se puede configurar para funcionar en modo cluster, para que varias instancias intercambien su información.

High level architecture

 

La siguiente tabla es un resumen de los conceptos basicos y ventajas de Eureka:

Conceptos básicos Definición Ventajas
Cliente Eureka Es un microservicio que está dispuesto a realizar una función específica dentro de un ecosistema conviviendo con más microservicios Abstracción de la localización física de cada microservicio
Instancia Eureka Es un recurso que representa un microservicio Conocer el estado de nuestro ecosistema de microservicios
Servicio Eureka Es un microservicio registrado como un cliente en el servidor Eureka La configuración como cluster incrementa su tolerancia a fallos
Servidor Eureka Es un servidor que autodetecta los microservicios y los registra Proporciona soporte a multiregión, es decir, se puede definir diferentes agrupaciones de microservicios

¿Cómo se configura?

Como se ha mencionado anteriormente, existen dos elementos diferenciados: un servidor Eureka y un cliente Eureka. Cabe destacar las anotaciones que proporciona Spring Cloud Netflix para facilitar la configuración de ambos.

Servidor Eureka

La configuración que hay que llevar a cabo para crear un servidor Eureka y usarlo como un registro de servicios es sencillo. El primer paso es agregar la dependencia de mavenspring-cloud-starter-eureka-server” para poder añadir a nuestra clase de configuración de Spring Boot la anotación @EnableEurekaServer.
Una vez hecho esto, se añade una configuración básica en el fichero de propiedades “application.yml”. En este caso, el formato que se va a emplear será YAML.

Eureka server properties

Como se puede observar, se indicará el puerto donde se quiere que despliegue. De igual modo, se indicará que la propiedad  “registerWithEureka” no se registre a sí misma, porque se quiere que actúe como servidor. 
Para comprobar que está levantado, el punto de acceso será: http://localhost:8761.

Cliente Eureka

Para que una aplicación sea identificada en el registro de Eureka, también se debe añadir la dependencia “spring-cloud-starter-eureka-server”, agregar a la clase de configuración de Spring Boot la anotación @EnableEurekaClient  y configurar su fichero de propiedades.

Eureka client properties

Finalmente, se define el nombre con el que se quiere registrar la aplicación, el puerto dónde se va a levantar y el servidor Eureka dónde debe registrarse.

Servicios y clientes no basados en Java

Si el servicio no está basado en Java, Eureka ofrece la posibilidad de implementar la parte cliente de Eureka en el lenguaje de programación que se desee. También cabe la posibilidad de ejecutar una aplicación Java que contiene un cliente Eureka integrado. Hay que indicar que, además, Eureka expone todas sus operaciones REST que soporta mediante puntos de entrada, “endpoints”,  para obtener más información sobre los clientes Eureka.

Referencias

   ≡   Spring Cloud Netflix   ≡   Eureka at a Glance   ≡