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 maven “spring-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.