API Gateway y Service Discovery: Integración fluida de Microservicios

February 7, 2024

Technology

En la era digital, las Interfaces de Programación de Aplicaciones (APIs) se han convertido en la piedra angular de la comunicación entre diferentes sistemas y servicios.

Con la proliferación de la arquitectura de microservicios, la importancia de las puertas de enlace de API y el descubrimiento de servicios es cada vez más prominente. La puerta de enlace de API sirve como la entrada de la arquitectura de microservicios, responsable de manejar todas las solicitudes externas y coordinar la comunicación entre los servicios internos; mientras que el descubrimiento de servicios garantiza que el sistema pueda encontrar y conectarse dinámicamente a las instancias de servicio correctas.

Juntos, construyen un sistema distribuido eficiente, flexible y escalable. Este artículo profundiza en las conexiones entre las puertas de enlace de API y el descubrimiento de servicios, y sus roles cruciales en los sistemas distribuidos modernos.

Puertas de Enlace de API y Descubrimiento de Servicios

Como la entrada de la arquitectura de microservicios, la puerta de enlace de API maneja todas las solicitudes externas y facilita la comunicación con los servicios internos. Sus principales funcionalidades incluyen:

  • Enrutamiento y reenvío de solicitudes: Enrutar las solicitudes a los servicios correspondientes según las características de la solicitud.
  • Control de acceso y autenticación de seguridad: Asegurar que solo los usuarios o sistemas autorizados puedan acceder a la API.
  • Balanceo de carga y almacenamiento en caché: Optimizar el rendimiento del servicio distribuyendo uniformemente las solicitudes a varias instancias de servicio y proporcionando almacenamiento en caché para reducir las solicitudes a los servicios backend.
  • Registro y análisis: Recopilar y analizar datos de uso de la API para respaldar la toma de decisiones empresariales.

Descubrimiento de servicios es un mecanismo utilizado para encontrar automáticamente instancias de servicio disponibles en un sistema distribuido. Cuando el número de servicios es grande y cambia dinámicamente, el descubrimiento de servicios se vuelve crucial. Los principios de registro y descubrimiento de servicios son los siguientes:

  • Registro de servicios: Cuando un servicio se inicia, registra su información (como dirección IP, número de puerto, etc.) en el registro de servicios.
  • Descubrimiento de servicios: Cuando otros servicios necesitan llamar a este servicio, consultan el registro de servicios para encontrar instancias de servicio disponibles y seleccionan una para la comunicación.

Conexiones entre Puertas de Enlace de API y Descubrimiento de Servicios

La puerta de enlace de API sirve como el "guardián" que maneja todas las solicitudes externas y las enruta inteligentemente a las instancias de servicio correctas. Las puertas de enlace de API y el descubrimiento de servicios son interdependientes en la arquitectura de microservicios, proporcionando estabilidad y escalabilidad.

Antes de introducir el descubrimiento de servicios, la puerta de enlace de API dependía de la configuración manual para especificar las direcciones de los servicios upstream. Una vez que las direcciones de las instancias de servicio cambian, como debido a actualizaciones, cambios de emergencia a instancias de respaldo, o la ampliación de más instancias de servicio debido al aumento del tráfico, los administradores deben actualizar manualmente la configuración de la puerta de enlace de API de manera oportuna. Este enfoque no solo es ineficiente, sino que también es difícil garantizar la precisión y la puntualidad.

A través del mecanismo de descubrimiento de servicios, la puerta de enlace de API puede conectarse dinámicamente al registro de servicios en tiempo real, obteniendo automáticamente las últimas direcciones de instancias de todos los servicios upstream y asegurando que las solicitudes se enruten con precisión a los nuevos servicios.

Al mismo tiempo, el mecanismo de descubrimiento de servicios puede notificar oportunamente a la puerta de enlace de API sobre condiciones de falla, evitando efectivamente el enrutamiento de solicitudes a servicios no disponibles. Al configurar la dirección del registro de servicios y los nombres de los servicios, la puerta de enlace de API ha logrado avances significativos en la reutilización de configuraciones en diferentes entornos, reduciendo la carga de trabajo de configuración y mejorando la reutilización y precisión de la configuración.

Descubrimiento de Servicios

Aplicación Práctica de la Integración de la Puerta de Enlace de API con el Descubrimiento de Servicios de Kubernetes

Supongamos que tenemos un sistema de arquitectura de microservicios basado en Kubernetes, desplegando múltiples servicios como servicios de usuario, servicios de pedidos, servicios de pago, etc. Cada servicio tiene múltiples réplicas (Pods), y las direcciones IP y los números de puerto de estas réplicas cambian dinámicamente a medida que se crean y destruyen los contenedores.

En este escenario, queremos usar la puerta de enlace de API para manejar las solicitudes externas y enrutarlas inteligentemente a los servicios de Kubernetes correctos. Al mismo tiempo, queremos aprovechar el mecanismo de descubrimiento de servicios de Kubernetes para descubrir y gestionar dinámicamente las instancias de servicio.

Paso 1: Despliegue y Registro de Servicios

En Kubernetes, usamos Deployments o StatefulSets para desplegar servicios y creamos los Services correspondientes como abstracciones de servicio. Kubernetes Services proporciona automáticamente balanceo de carga para los Pods backend y mapea los nombres de servicio a direcciones IP internas del clúster y números de puerto estables.

Cuando se crean o destruyen Pods, el Service Controller de Kubernetes actualiza automáticamente los objetos Endpoint de los servicios, que contienen las direcciones IP y los números de puerto de todos los Pods relacionados. Estos objetos Endpoint se almacenan en el API server de Kubernetes para que otros componentes los consulten.

Paso 2: Despliegue y Configuración de la Puerta de Enlace de API

Tomando API7 Enterprise como ejemplo, nos conectamos a la dirección del registro de servicios de Kubernetes en el grupo de puertas de enlace. Cuando publicamos un servicio en el grupo de puertas de enlace, en lugar de ingresar manualmente la dirección de la instancia upstream, seleccionamos este registro de Kubernetes y especificamos el namespace y el Service correspondiente dentro de él. API7 Enterprise recupera automáticamente la información de Endpoint del servicio correspondiente del API server de Kubernetes como la dirección upstream del servicio.

Paso 3: Manejo de Solicitudes

Cuando la puerta de enlace de API recibe una solicitud externa, determina a qué servicio enrutar la solicitud según las reglas de enrutamiento configuradas. Luego, consulta el API server de Kubernetes para obtener la información upstream más reciente. La puerta de enlace de API selecciona una instancia de esta información (basada en diferentes estrategias de balanceo de carga) y reenvía la solicitud a esa instancia. Dado que la información de Endpoint se actualiza dinámicamente, la puerta de enlace de API puede manejar automáticamente la creación, destrucción y migración de Pods, asegurando que las solicitudes siempre se enruten a los upstream disponibles.

Paso 4: Descubrimiento y Actualizaciones de Servicios

En Kubernetes, el descubrimiento de servicios se realiza automáticamente. Cuando el estado de los Pods cambia (como creación, destrucción o migración), el Service Controller de Kubernetes actualiza automáticamente los objetos Endpoint del servicio correspondiente.

La puerta de enlace de API recupera periódicamente la información de Endpoint más reciente del API server de Kubernetes y actualiza su upstream basándose en esta información. Esto permite que la puerta de enlace de API perciba instantáneamente los cambios en el estado del servicio y ajuste automáticamente las reglas de enrutamiento para garantizar que las solicitudes se enruten correctamente a las instancias de servicio disponibles.

Conclusión

A través de la integración de la puerta de enlace de API y el descubrimiento de servicios de Kubernetes, nuestro sistema puede lograr el registro y descubrimiento dinámico de servicios, el enrutamiento inteligente y el balanceo de carga. Este enfoque simplifica la configuración y gestión del sistema, mejora la confiabilidad y escalabilidad del sistema, y aprovecha al máximo las potentes características proporcionadas por Kubernetes, haciendo que el despliegue y operación de la arquitectura de microservicios sea más simple y eficiente.

Tags: