Patrones de diseño de detección de servicios para la arquitectura de microservicios

Cuando nuestro servicio usa la API REST para llamar al servicio, necesitamos conocer la ubicación de la red (dirección IP y puerto) de la instancia del servicio.

Las API para instancias de servicio en aplicaciones tradicionales que se ejecutan en servidores suelen ser estáticas. En las aplicaciones de microservicio basadas en la nube de hoy en día, las API a menudo no son tan fáciles de configurar. Las instancias de servicio cambian dinámicamente debido al escalado automático, fallas y actualizaciones. Por lo tanto, tenemos que usar el descubrimiento de servicios en el código del cliente.

1. Descubrimiento de servicios

La dirección IP del servicio no se puede configurar estáticamente en el cliente. Necesidad de utilizar el descubrimiento de servicios dinámicos. Conceptualmente, el descubrimiento de servicios es muy simple, su componente principal es un registro de servicios, que contiene una lista de ubicaciones de red de instancias de servicios de aplicaciones.

El registro de servicio se actualiza cuando las instancias de servicio se inician y se detienen. El mecanismo de descubrimiento de servicios funciona consultando el registro de servicios para obtener una lista de instancias de servicios disponibles y enrutando una solicitud a una de ellas cuando un cliente invoca un servicio.

2. Modo de descubrimiento de servicios a nivel de aplicación

Los servicios de una aplicación y sus clientes pueden interactuar con un registro de servicios para el descubrimiento de servicios. Cada instancia de servicio registra su ubicación de red con el registro de servicios, desde el cual se solicita una lista de instancias de servicio antes de invocar el servicio. Luego, el cliente envía una solicitud a una de las instancias.

Este enfoque es una combinación de dos patrones.

  • Modo de autorregistro  : durante el inicio, la instancia de servicio llama a la API de registro del registro para registrar su ubicación de red, y el registro requiere que la instancia de servicio llame periódicamente a la API de latido para evitar que caduque su registro. Cuando una instancia de servicio se cierra, se da de baja del registro de servicio.
  • Modo de descubrimiento del cliente  : para invocar un servicio, el cliente del servicio consulta el registro del servicio para obtener una lista de instancias del servicio. El cliente utiliza un algoritmo de equilibrio de carga para seleccionar una instancia de servicio y solicita la instancia seleccionada.

Netflix y Pivotal han popularizado el descubrimiento de servicios de nivel empresarial. Por ejemplo, Eureka de Netflix es un registro de servicios de alta disponibilidad. Los componentes de Netflix se pueden usar fácilmente con Spring Cloud, un marco basado en Spring desarrollado por Pivotal. Los servicios basados ​​en Spring Cloud se registran con Eureka, y los clientes basados ​​en Spring Cloud usan Eureka para descubrir servicios.

3. Desventajas del descubrimiento de servicios de capa de aplicación

  • Requiere una biblioteca de detección de servicios específica del idioma.
  • Se requiere personal de operación y mantenimiento para mantener la configuración y administrar el registro del servicio.
  • La posibilidad de que falten cierres de sesión del registro del servicio surge cuando una instancia de servicio se está ejecutando pero no procesa solicitudes.

4. El modo de descubrimiento de servicios proporcionado por la plataforma.

Muchas plataformas de implementación, como Docker y Kubernetes, tienen registros de servicios integrados y mecanismos de detección de servicios. A cada servicio se le asigna un nombre DNS, una dirección IP virtual (VIP) y un nombre DNS que se resuelve en la dirección VIP.

Un cliente de servicio solicita un nombre DNS/VIP y la plataforma de implementación enruta automáticamente la solicitud a una instancia de servicio disponible. De esta manera, la plataforma de implementación maneja el registro de servicios, el descubrimiento de servicios, el enrutamiento de solicitudes, etc. El registro de servicios realiza un seguimiento de las direcciones IP de los servicios implementados en la plataforma de implementación.

Este enfoque es una combinación de dos patrones:

  • Patrón de registro de terceros : en lugar de que un servicio se registre con un registro de servicios, un registrador de terceros (generalmente parte de la plataforma de implementación) realiza el registro. El registrador registra instancias de servicio con el registro de servicio al inicio. El registrador anula el registro de la instancia de servicio del registro de servicio cuando la instancia se cierra.
  • Modo de descubrimiento del lado del servidor  : en lugar de que un cliente consulte un registro de servicio, realiza una solicitud a un nombre de DNS que se resuelve en un enrutador de solicitud que consulta el registro y equilibra la carga de las solicitudes. AWS Elastic Load Balancer (ELB) es un ejemplo de enrutador de descubrimiento del lado del servidor. Los clientes envían solicitudes HTTP/TCP al ELB, que equilibra la carga del tráfico en un conjunto de instancias EC2. ELB también actúa como un registro de servicios. Las instancias se registran explícitamente con ELB a través de una llamada API o se registran automáticamente como parte de un grupo de escalado automático.

5. Beneficios del descubrimiento de servicios basado en plataforma

  • La plataforma de implementación maneja todo el trabajo de descubrimiento de servicios.
  • Ni el servicio ni el cliente contienen ningún código para el descubrimiento del servicio.
  • El descubrimiento de servicios está disponible para todos los servicios y clientes, sin importar en qué idioma estén escritos.

6. Desventajas del descubrimiento de servicios basado en plataforma

  • Solo se pueden descubrir los servicios que se han implementado utilizando la plataforma.

Supongo que te gusta

Origin blog.csdn.net/stone1290/article/details/126326810
Recomendado
Clasificación