CodeGym /Cursos /Módulo 5. Spring /Lección 245: Introducción a Service Discovery (Eureka)

Lección 245: Introducción a Service Discovery (Eureka)

Módulo 5. Spring
Nivel 24 , Lección 4
Disponible

Antes de meternos en los detalles de Eureka, intentemos responder a la pregunta: ¿qué tiene de malo simplemente poner las direcciones de los microservicios a mano?

Imagina que los microservicios no son edificios estáticos con una dirección fija, sino una flota de taxis. Los coches (servicios) salen constantemente a la ruta, se rompen, se reemplazan por otros nuevos y cambian de ubicación. Ahora intenta dar servicio a clientes si no tienes un despachador: tendrás que buscar y anotar las coordenadas de los coches manualmente cada vez.

En el mundo de los microservicios, ese "despachador" es Service Discovery. Él hace un seguimiento automático de qué servicios están disponibles, dónde están y a dónde hay que enviar las peticiones. Eureka es una de las implementaciones populares de este sistema.

Problemas de la configuración estática:

  1. Aumento del riesgo de errores. Si tienes que actualizar manualmente las direcciones de todos los microservicios, hay una alta probabilidad de romper algo por accidente. Especialmente si usas decenas (o cientos) de microservicios.
  2. Complicación del escalado. Al añadir una nueva instancia de un microservicio hay que actualizar la configuración de otros microservicios que interactúan con él.
  3. Lento tiempo de reacción ante cambios. Si la dirección de algún servicio cambia, hacen falta acciones manuales para aplicar las correcciones. Esto frena el proceso de entrega de nuevas versiones.

Service Discovery resuelve estos problemas, permitiendo que los microservicios se encuentren automáticamente sin necesidad de configuración manual. La idea principal es la gestión centralizada de direcciones y metadatos de los servicios.


¿Cómo funciona Service Discovery?

Componentes de Service Discovery:

  • Service Registry (registro de servicios): una base de datos central donde se guardan las direcciones (y otros metadatos) de todos los microservicios disponibles.
  • Service Provider (proveedor de servicios): el microservicio que se registra en el Service Registry.
  • Service Consumer (consumidor de servicios): el microservicio que solicita las direcciones de otros servicios desde el Service Registry para interactuar con ellos.

Ejemplo del ciclo de trabajo de Service Discovery:

  1. Registro: Cuando un microservicio arranca, se registra en el Service Registry indicando su dirección (normalmente IP y puerto) y otros parámetros.
  2. Heartbeat (señales de vida): El microservicio periódicamente envía mensajes heartbeat al registro para indicar que sigue vivo.
  3. Descubrimiento: Otro microservicio (consumidor) obtiene la dirección del servicio registrado pidiéndola al registro.
  4. Cancelación de registro: Si un microservicio muere (o su instancia se detiene), su entrada se elimina del registro.

Eureka

Ahora que entendemos la concepto de Service Discovery, podemos pasar a una de las herramientas más populares y fáciles de integrar — Eureka. Es una biblioteca de Netflix que se volvió Open Source y forma parte de Spring Cloud.

Ventajas de Eureka:

  1. Integración sencilla con Spring Boot. Puedes añadir Eureka a tu proyecto fácilmente simplemente agregando las dependencias correspondientes.
  2. Soporte para registro y descubrimiento dinámico de servicios. Eureka facilita la escalabilidad y la tolerancia a fallos de las aplicaciones.
  3. Soporte del esquema CAP (Consistency, Availability, Partition-tolerance). Se puede configurar Eureka para que se enfoque más en Availability, lo que la convierte en una opción ideal para microservicios.
  4. Monitorización y gestión a través del Dashboard. Puedes ver los servicios registrados, su estado y métricas mediante una interfaz web.

Componentes principales de Eureka

  1. Eureka Server:
    • Componente central en el sistema de Service Discovery que almacena la información de todos los servicios registrados.
    • Actúa como una base de datos centralizada para las direcciones de los microservicios.
    • Se encarga de procesar los registros y los mensajes heartbeat.
  2. Eureka Client:
    • Biblioteca que se integra en tus microservicios para que puedan registrarse en el Eureka Server.
    • También se encarga de obtener las direcciones de otros servicios desde el Eureka Server.
  3. Dashboard:
    • Interfaz web para monitorizar el Eureka Server. Muestra los servicios registrados, su estado (UP/DOWN), logs y direcciones.

Interacción de los componentes


+------------------+        Registration       +------------------+
|  Service A       |------------------------->|  Eureka Server   |
| (Eureka Client)  |     Service Discovery    |                  |
+------------------+<-------------------------+------------------+
+------------------+
|  Service B       |
| (Eureka Client)  |
+------------------+

Ejemplo: Iniciar Eureka Server

Antes de usar Service Discovery, tenemos que arrancar el Eureka Server. Para ello realizaremos los siguientes pasos:

  1. Añadir la dependencia en pom.xml
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    

  2. Anotación @EnableEurekaServer

    En la clase Application añadimos la anotación para activar el Eureka Server:

    @SpringBootApplication
    @EnableEurekaServer
    public class EurekaServerApplication {
        public static void main(String[] args) {
            SpringApplication.run(EurekaServerApplication.class, args);
        }
    }
    
  1. Configuración de application.yml

    Crearemos el archivo application.yml en la carpeta resources:

    
    server:
      port: 8761 # puerto de Eureka Server
    eureka:
      client:
        register-with-eureka: false # Eureka Server no se registra a sí mismo
        fetch-registry: false       # Eureka Server no consulta el registro
      instance:
        hostname: localhost         # host principal
    
  1. Arrancar la aplicación

    Ahora puedes iniciar la aplicación y el servidor Eureka estará disponible en http://localhost:8761.

Ejemplo: Registro de un microservicio en Eureka Server

Tras arrancar el servidor, vamos a configurar el cliente para que se registre en él.

  1. Añadir la dependencia
    
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    

  2. Configuración del cliente

    Añadimos en application.yml la configuración para conectarse al Eureka Server:

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8761/eureka/ # URL del Eureka Server
      instance:
        prefer-ip-address: true # Registrar IP en lugar del nombre de host
    
  1. Anotación @EnableEurekaClient

    Añadimos la anotación en la clase principal:

    
    @SpringBootApplication
    @EnableEurekaClient
    public class ServiceAApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceAApplication.class, args);
    }
    }
    

Comprobación

Arranca primero el Eureka Server, y luego el Eureka Client (tu microservicio). Ve a http://localhost:8761 para comprobar que tu cliente se ha registrado en el sistema. Ahí verás el nombre del servicio, su estado y la dirección.


Ventajas y desafíos

Usar Eureka simplifica mucho la gestión de microservicios en entornos dinámicos, pero hay que tener en cuenta la carga sobre el servidor y la necesidad de que los mensajes heartbeat funcionen de forma fiable. Es una herramienta potente que ayuda a que los sistemas sean más flexibles y escalables.

Ahora que sabes cómo funciona Service Discovery y sabes configurar tanto Eureka Server como Eureka Client, estás listo para crear aplicaciones de microservicios más complejas con descubrimiento automático de servicios.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION