[Spring Cloud] Comprensión profunda de los principios del centro de registro, registro y descubrimiento de servicios de Eureka


Prefacio

En la arquitectura de microservicios, el registro y el descubrimiento de servicios son cruciales. Para lograr este objetivo, nació el registro Eureka. En este artículo, comprenderemos en profundidad los principios del registro de Eureka y exploraremos el mecanismo de registro y descubrimiento de servicios.

En la colaboración de microservicios, las llamadas remotas entre servicios son un requisito común. Sin embargo, existen algunos problemas al utilizar el método tradicional de llamada remota RestTemplate, como un alto acoplamiento y dificultad de mantenimiento. Para resolver estos problemas, exploraremos cómo utilizar el registro de Eureka para registrar y descubrir servicios de manera elegante, a fin de construir mejor una arquitectura de microservicios.

A continuación, exploraremos gradualmente en profundidad los principios del centro de registro de Eureka, la construcción de servicios de Eureka, el registro y descubrimiento de servicios y otros contenidos clave. Espero que leer este artículo pueda ayudarnos a comprender mejor el papel de Eureka en la arquitectura de microservicios y cómo usarlo de manera flexible para construir un sistema distribuido eficiente y confiable.

1. Problemas derivados de las llamadas de microservicios

En una arquitectura de microservicios, las llamadas remotas entre servicios son un requisito común. Sin embargo, a medida que aumenta la complejidad del sistema, la invocación de servicios también trae algunos problemas y desafíos.

1.1 ¿Cómo obtienen los consumidores de servicios la información de dirección de los proveedores de servicios?

En una arquitectura de microservicio, la información de dirección de los proveedores de servicios suele ser dinámica y puede cambiar en cualquier momento, como expansión, reducción, migración, etc. Por lo tanto, los consumidores de servicios necesitan un mecanismo para obtener la información de la dirección del proveedor de servicios para garantizar que las llamadas remotas puedan iniciarse correctamente.

Solución: registro y descubrimiento de servicios

  • El proveedor de servicios registra la información de su dirección en el centro de registro de servicios al iniciar, incluido el nombre del host, el número de puerto y otra información.
  • El consumidor del servicio obtiene la información de la dirección del proveedor del servicio consultando el centro de registro del servicio, de modo que pueda iniciar llamadas dinámicamente.

1.2 Si hay varios proveedores de servicios, ¿cómo deberían elegir los consumidores?

En aplicaciones reales, puede haber varios proveedores de servicios que brinden el mismo servicio, en este caso, el consumidor del servicio debe elegir un proveedor adecuado para iniciar la llamada. La selección puede basarse en factores como el equilibrio de carga, los indicadores de rendimiento y el estado de salud.

Solución: equilibrio de carga

  • El equilibrio de carga es una estrategia utilizada para distribuir solicitudes entre múltiples proveedores de servicios para lograr una carga equilibrada.
  • Las estrategias comunes de equilibrio de carga incluyen sondeo, aleatorio, sondeo ponderado, aleatorio ponderado, etc. Diferentes estrategias son adecuadas para diferentes escenarios.

1.3 ¿Cómo conocen los consumidores el estado de salud de los proveedores de servicios?

En una arquitectura de microservicios, el estado de salud de los proveedores de servicios es información muy importante para los consumidores de servicios. Si un proveedor de servicios falla o no está disponible, los consumidores del servicio deben evitar realizarle solicitudes para garantizar la estabilidad y confiabilidad del sistema.

Solución: control de estado y mecanismo de tolerancia a fallos

  • El control de salud es un mecanismo para monitorear el estado de salud de los proveedores de servicios, generalmente realizado por un registro de servicios.
  • Los consumidores de servicios pueden determinar si el proveedor de servicios está disponible en función de los resultados del control de salud y así decidir si inician una llamada.
  • El mecanismo de tolerancia a fallas puede ayudar a los consumidores de servicios a manejar fallas que pueden ocurrir durante llamadas remotas, como tiempos de espera, reintentos, degradaciones, etc.

Entre ellos, Eureka es una solución para el registro y descubrimiento de servicios que resuelve algunos problemas clave en las llamadas de microservicios a través del centro de registro de servicios.

2. ¿Qué es Eureka?

Eureka es un marco de descubrimiento y registro de servicios de código abierto proporcionado por Netflix, que se utiliza para construir sistemas distribuidos basados ​​​​en arquitectura de microservicios. Resuelve los problemas de registro dinámico, descubrimiento y equilibrio de carga de servicios en la arquitectura de microservicios y es una de las herramientas importantes para crear microservicios escalables y de alta disponibilidad.

2.1 Conceptos centrales de Eureka

  • Registro de servicio

En la arquitectura de microservicios, el proveedor de servicios registra su propia información en el centro de registro de Eureka al inicio, incluido el nombre del servicio, la dirección de red, etc. De esta forma, el centro de registro de Eureka sabe qué servicios están disponibles en el sistema.

  • descubrimiento de servicios

Los consumidores de servicios pueden obtener información sobre los servicios disponibles consultando el registro de Eureka para decidir a qué servicios llamar. El registro de Eureka mantiene una lista de instancias de servicios, incluida la dirección de red de cada servicio.

  • Latidos del corazón y control de salud.

El registro de Eureka envía periódicamente solicitudes de latido al proveedor de servicios para detectar si el servicio todavía está disponible. Si un servicio no envía un latido dentro de un cierto período de tiempo, Eureka lo marca como no disponible. Esto permite monitorear el estado de salud del servicio.

  • balanceo de carga

El cliente Eureka integra el equilibrador de carga Ribbon, que puede lograr el equilibrio de carga entre múltiples proveedores de servicios. Al utilizar Ribbon, el consumidor del servicio puede seleccionar un proveedor de servicios adecuado para iniciar la llamada.

Ventajas de Eureka

  1. Invocación de servicio simplificada: Eureka proporciona una API simple, lo que hace que el registro, el descubrimiento y la invocación del servicio sean muy fáciles.

  2. Alta disponibilidad: Eureka admite la implementación en clúster de centros de registro de servicios y garantiza una alta disponibilidad de los centros de registro mediante el registro mutuo.

  3. Equilibrio de carga: el equilibrador de carga de cinta integrado puede realizar la distribución de solicitudes a múltiples proveedores de servicios y mejorar el rendimiento y la estabilidad del sistema.

  4. Expansión dinámica: Eureka admite el registro dinámico y la cancelación del registro de servicios para adaptarse a los cambios dinámicos en las instancias de servicio.

  5. Comprobación de estado: a través de latidos y comprobaciones de estado, Eureka puede detectar instancias de servicios no disponibles a tiempo para garantizar una alta disponibilidad de los servicios.

En general, Eureka es un potente marco de registro y descubrimiento de servicios que proporciona soporte de infraestructura confiable para crear una arquitectura de microservicios.

2.2 La solución de Eureka al problema de las llamadas de microservicios

  1. ¿Cómo obtienen los consumidores de servicios la información de dirección de los proveedores de servicios?

    • Centro de registro de Eureka: el proveedor de servicios registra la información de su dirección en el centro de registro de Eureka al comenzar. Los consumidores de servicios pueden obtener la información de dirección de los proveedores de servicios consultando el centro de registro de Eureka.
  2. Si hay varios proveedores de servicios, ¿cómo deberían elegir los consumidores?

    • Equilibrio de carga: Eureka admite el equilibrio de carga y los consumidores de servicios pueden utilizar estrategias de equilibrio de carga para seleccionar un proveedor de servicios adecuado. El cliente Eureka integra el equilibrador de carga Ribbon, que puede lograr fácilmente el equilibrio de carga.
  3. ¿Cómo conocen los consumidores el estado de salud de los proveedores de servicios?

    • Control de salud: el centro de registro de Eureka realiza periódicamente controles de salud de los proveedores de servicios. Si un proveedor de servicios falla, Eureka lo marcará como no disponible. Los consumidores de servicios pueden filtrar los proveedores de servicios no disponibles cuando consultan la lista de servicios para garantizar que solo se seleccionen servicios en buen estado.

En resumen, Eureka proporciona un mecanismo para el registro y descubrimiento de servicios e integra funciones como el equilibrio de carga y la verificación del estado, resolviendo de manera efectiva problemas clave en la invocación de microservicios. Al utilizar Eureka, las llamadas de servicio en la arquitectura de microservicios se vuelven más flexibles, confiables y altamente disponibles.

3. El principio de Eureka

Eureka es un marco de registro y descubrimiento de servicios proporcionado por Netflix. A través de las eureka-serverdos eureka-clientpartes y trabajando juntas, realiza las funciones de registro dinámico, descubrimiento, equilibrio de carga y verificación del estado de los servicios en la arquitectura de microservicios. A continuación veremos más de cerca cómo funciona Eureka.

3.1 Componentes principales de Eureka

3.1.1 servidor eureka

  • Centro de registro de servicios: eureka-server Actúa como un centro de registro de servicios, responsable de recibir la información de registro del proveedor de servicios y mantener el registro.

  • Registro de servicios: el proveedor de servicios eureka-serverregistra su propia información, incluido el nombre del servicio, la dirección de red, etc., con el proveedor de servicios al inicio para formar un registro de servicios.

  • Control de salud: eureka-server envíe latidos al proveedor de servicios con regularidad y mantenga el estado de salud del servicio mediante controles de salud.

3.1.2 cliente eureka

  • Proveedor de servicios: cada módulo de servicio del microservicio registra su propio servicio eureka-clientcon .eureka-server

  • Consumidor de servicios: el consumidor de servicios en microservicios logra el descubrimiento de servicios obteniendo información sobre los servicios disponibles eureka-clientde .eureka-server

  • Equilibrio de carga: eureka-client el equilibrador de carga de cinta integrado puede lograr el equilibrio de carga entre múltiples proveedores de servicios y mejorar el rendimiento y la confiabilidad del sistema.

3.2 Flujo de trabajo Eureka

El flujo de trabajo de Eureka se puede representar mediante la siguiente figura:

flujo de trabajo eureka

  1. Etapa de registro del servicio:

    • Cuando se inicia un proveedor de servicios, registra la información de su servicio eureka-clienten .eureka-server

    • El registro incluye el nombre del servicio, la dirección de red, etc., y el proveedor del servicio pasa a formar parte del registro del servicio.

  2. Fase de descubrimiento de servicios:

    • Los consumidores de servicios envían solicitudes de descubrimiento de servicios a eureka-clienttravés de eureka-server.

    • eureka-serverDevuelve información sobre los servicios disponibles, incluidos los nombres de los servicios y las direcciones de red correspondientes.

    • El consumidor del servicio selecciona un proveedor de servicios según la política de equilibrio de carga.

  3. Inspección y mantenimiento sanitario:

    • eureka-serverEnvía periódicamente latidos al proveedor de servicios para verificar el estado del servicio.

    • Si un proveedor de servicios no envía latidos durante un período prolongado, eureka-servermárquelo como no disponible.

    • Los servicios no disponibles se eliminarán del registro de servicios para mantener la precisión del registro de servicios.

A través del proceso anterior, Eureka realiza el registro dinámico y el descubrimiento de servicios, asegurando la alta disponibilidad y las capacidades de expansión elástica de la arquitectura de microservicios. El diseño principal de Eureka hace que las llamadas entre microservicios sean más flexibles y confiables.

4. Construya el servicio Eureka

Los pasos para construir el servicio Eureka en el código de demostración de Spring Cloud son los siguientes:

  1. Crear un proyecto e introducir spring-cloud-starter-netflix-eureka-serverdependencias.
<!-- eureka 服务端-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. Escribir clase de inicio y agregar @EnableEurekaServeranotaciones.
@EnableEurekaServer // 开启 EurekaServer 自动装配
@SpringBootApplication
public class EurekaApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  1. Agregue application.ymlarchivos y escriba la siguiente configuración.
server:
  port: 10086
spring:
  application:
    name: eurekaservice # 服务的名称
eureka:
  client:
    service-url: # eureka 的地址信息
      defaultZone: http://127.0.0.1:10086/eureka/ # eureka 也是一个微服务,因此启动的时候也会将自己注册进 eureka 中(为集群起作用)

Después de completar todos los pasos anteriores, puede ejecutar EurekaApplication la clase de inicio y luego podrá acceder a la dirección: http://localhost:10086/.

Si la página que aparece en este momento es la siguiente significa que el servicio Eureka se ha configurado exitosamente: lo que se muestra

a continuación Instances currently registered with Eurekaes el servicio actualmente registrado en Eureka.

5. Servicio de registro

5.1 user-serviceServicio de Registro

Los pasos para user-serviceregistrar el servicio en EurekaServer son los siguientes:

  1. Introducir dependencias en user-serviceel proyecto.pom.xmlspring-cloud-starter-netflix-eureka-client
 <!-- eureka 客户端-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>
  1. En application.ymlel archivo, escriba la siguiente configuración.
spring:
  application:
    name: userservice
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka/ 

En este punto, encontramos que esta configuración es básicamente la misma que la configuración cuando se construyó EurekaServer arriba, la razón es que Eureka también se registrará en EurekaServer cuando se inicie, y la función de esta configuración es registrar el servicio especificado (distinguido por ) a application namela defaultZonedirección correspondiente en EurekaServer.

5.2 order-serviceServicio de Registro

  1. Introducir dependencias en order-serviceel proyecto.pom.xmlspring-cloud-starter-netflix-eureka-client
 <!-- eureka 客户端-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>
  1. En application.ymlel archivo, escriba la siguiente configuración.
spring:
  application:
    name: orderservice
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka/ 

En este punto, inicie los servicios user-servicey order-service, cuando vuelva a visitarlos, http://localhost:10086/encontrará que el servicio se ha registrado correctamente en EurekaServer:

5.3 Iniciar múltiples instancias del mismo servicio

Además, en IDEA, podemos iniciar varias instancias de un servicio al mismo tiempo, solo debemos asegurarnos de que los números de puerto de diferentes instancias no entren en conflicto.

Por ejemplo, si quiero agregar dos user-serviceinstancias de servicio en este momento, los pasos son los siguientes:

  1. Haga clic derecho UserApplicationy seleccione Copy ConfigurationCopiar

  2. Luego realice las siguientes configuraciones

    -Dserver.port=8082para restablecer el número de puerto a 8082 para esta configuración. Puede copiar otra configuración de la misma manera.

Inicie ambas instancias y visite nuevamente http://localhost:10086/:


En este momento, puede encontrar que user-servicelos servicios de las dos nuevas instancias también se registraron exitosamente en EurekaServer.

6. Descubrimiento de servicios

Después de registrar el servicio en EurekaServer, todo lo que necesita hacer es extraer el servicio. La extracción del servicio en EurekaServer se basa en 服务名称obtener una lista de servicios y luego seleccionar 负载均衡un servicio de la lista de servicios.

En este momento, si queremos order-servicepoder extraer user-servicelos servicios registrados en EurekaServer, debemos realizar las siguientes operaciones:

  1. Modifique order-serviceel código, modifique la ruta de la URL de acceso y reemplace la IP y el puerto con el nombre del servicio.
public Order queryOrderById(Long orderId) {
    
    
    // 1. 查询订单
    Order order = orderMapper.findById(orderId);

    // 2. 查询用户
    // 2.1 构建查询用户的 url
    String url = "http://userservice/user/" + order.getUserId();

    // 2.2 使用 RestTemplate 远程调用查询用户
    User user = restTemplate.getForObject(url, User.class);

    // 3. 封装 user 信息
    order.setUser(user);

    // 4.返回
    return order;
}

Aquí, se utiliza userserviceel nombre del servicio en lugar de user-servicela IP del servicio y el número de puerto.

  1. Agregar anotaciones de equilibrio de carga en order-servicela OrderApplicationclase de inicio del servicioRestTemplate@LoadBalanced
@SpringBootApplication
public class OrderApplication {
    
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(OrderApplication.class, args);
    }

    /**
     * 创建 RestTemplate 并注册到 Spring 容器
     */
    @LoadBalanced // 负载均衡
    @Bean
    public RestTemplate restTemplate(){
    
    
        return new RestTemplate();
    }
}

En este punto, reinicie el servicio y podrá acceder con éxito a los servicios proporcionados order-servicepor EurekaServer .user-service

En este momento, borre user-servicelos registros de las tres instancias de servicio y luego consulte la información del pedido tres veces seguidas en el navegador:



De esto se puede ver que cada una de las tres instancias tiene una solicitud de servicio, lo que indica que la estrategia adoptada por el equilibrio de carga en este momento es un método de sondeo.

Supongo que te gusta

Origin blog.csdn.net/qq_61635026/article/details/133356097
Recomendado
Clasificación