¿Por qué los Microservicios Necesitan un API Gateway?

Xiaolan Cheng

February 17, 2023

Ecosystem

¿Qué son los microservicios?

La arquitectura de microservicios, comúnmente conocida como microservicios, es un tipo de arquitectura utilizada para desarrollar aplicaciones. Con los microservicios, las aplicaciones grandes pueden descomponerse en múltiples componentes independientes, cada uno con sus propias responsabilidades. Al procesar una solicitud de usuario, una aplicación basada en microservicios puede llamar a muchos microservicios internos para generar su respuesta de manera conjunta. Los microservicios son el resultado del desarrollo de Internet, y el rápido crecimiento de la red ha provocado que la arquitectura de los sistemas cambie constantemente.

En general, la arquitectura de los sistemas ha evolucionado aproximadamente desde la arquitectura monolítica hasta la arquitectura SOA y luego a la arquitectura de microservicios. La progresión específica y los pros y contras de cada arquitectura se resumen en la siguiente tabla.

Tipo de ArquitecturaDescripciónVentajasDesventajas
Arquitectura de Aplicación MonolíticaEmpaqueta todo el código funcional en un solo servicio.1. Arquitectura simple con bajos costos de desarrollo y mantenimiento del proyecto.Acoplar todos los módulos es beneficioso para desarrollar y mantener proyectos pequeños, pero puede crear problemas para proyectos grandes, incluyendo
1. Los módulos del proyecto están demasiado acoplados, y un problema de rendimiento en un módulo puede hacer que todo el proyecto quede inaccesible;
2. El proyecto necesita una mejor escalabilidad.
Arquitectura SOAEl término significa "arquitectura orientada a servicios", que generalmente implica múltiples servicios.
Un servicio suele existir de forma independiente en un proceso del sistema operativo, y la comunicación entre servicios se logra mediante dependencias o mecanismos de comunicación,
Finalmente, proporciona una serie de funciones.
1. Integración de sistemas: Desde una perspectiva sistémica, resuelve los problemas de comunicación entre los sistemas empresariales al convertir sus conexiones de red previamente desordenadas y no estructuradas en una configuración gestionada y estructurada en estrella.
2. Sistema orientado a servicios: Desde una perspectiva funcional, abstrae la lógica de negocio en servicios reutilizables y combinables, y utiliza la orquestación de servicios para lograr la rápida reconstrucción de los procesos de negocio.
3. Servicios orientados al negocio: Desde la perspectiva de la empresa, abstrae las funciones empresariales en servicios reutilizables y combinables.
1. Centralizar los servicios crea dependencias entre ellos, y un mal funcionamiento en un servicio puede desencadenar un fallo en cascada en otros servicios.
2. Las dependencias y relaciones de invocación entre servicios son complejas, lo que dificulta las pruebas y el despliegue.
Arquitectura de MicroserviciosLos microservicios son la sublimación de SOA. Uno de los énfasis clave de la arquitectura de microservicios es "la necesidad de componentizar y servicializar completamente el negocio",
El sistema de negocio original se dividirá en múltiples partes que pueden desarrollarse, diseñarse y desplegarse de forma independiente.
Estas partes se ejecutarán como pequeñas aplicaciones independientes. Cada aplicación colaborará y se comunicará con las demás para lograr integración e interactividad, que es la esencia de una arquitectura de microservicios.
1. Descentralización;
2. Componentización a través de servicios;
3. División de servicios y equipos de desarrollo basados en capacidades de negocio;
4. Automatización de infraestructura (DevOps, despliegue automatizado).
1. El costo de desarrollo es relativamente alto;
2. Causa problemas de tolerancia a fallos en los servicios;
3. Causa problemas de consistencia de datos;
4. Involucra transacciones distribuidas.

Por lo tanto, los microservicios son un resultado inevitable del desarrollo de Internet, y la arquitectura de sistemas de muchas empresas tradicionales se está volviendo gradualmente orientada a microservicios.

Sin embargo, con el desarrollo del negocio en Internet, el número de APIs también está aumentando drásticamente, y las puertas de enlace para la gestión unificada de APIs también enfrentarán desafíos. Elegir una puerta de enlace API más robusta puede mejorar efectivamente las capacidades del sistema en monitoreo, recuperación ante desastres, autenticación y limitación de tasa.

¿Qué es una puerta de enlace API?

La puerta de enlace API proporciona una interfaz unificada para las interacciones entre los clientes y los sistemas de servicios y sirve como un punto central para gestionar solicitudes y respuestas. Elegir una puerta de enlace API adecuada puede simplificar el desarrollo y mejorar la eficiencia de la operación y gestión del sistema.

En una arquitectura de microservicios, una puerta de enlace API sirve como una solución para el diseño del sistema al integrar varios microservicios de diferentes módulos y coordinar los servicios de manera unificada.

Como un aspecto de acceso al sistema, la puerta de enlace API proporciona un punto de entrada unificado para los clientes, oculta los detalles de implementación de la arquitectura del sistema y hace que los microservicios sean más amigables para el usuario. También integra algunas características comunes como autenticación, limitación de tasa y corte de circuito para evitar el desarrollo individual de cada microservicio, mejorar la eficiencia y estandarizar el sistema, como autenticación de identidad, monitoreo, balanceo de carga, limitación de tasa, degradación y detección de aplicaciones.

¿Por qué los microservicios necesitan una puerta de enlace API?

Puerta de enlace API en microservicios

Como se muestra en el diagrama anterior, la puerta de enlace API sirve como una capa intermedia entre el cliente y los microservicios. Puede proporcionar microservicios al exterior en una dirección unificada y enrutar el tráfico a los nodos de servicio correctos dentro del clúster interno según las reglas apropiadas.

Sin una puerta de enlace API, las entradas y salidas del tráfico no están unificadas, y el cliente necesita conocer la información de acceso de todos los servicios. El significado de los microservicios no existiría. Por lo tanto, una puerta de enlace de microservicios es necesaria para una arquitectura de microservicios. Además, la puerta de enlace API juega un papel vital en la observabilidad del sistema, autenticación de identidad, estabilidad y descubrimiento de servicios.

Desafíos enfrentados por los microservicios

La puerta de enlace de microservicios debe tener primero capacidades de enrutamiento de API. A medida que aumenta el número de microservicios, también lo hace el número de APIs. La puerta de enlace también puede usarse como un filtro de tráfico en escenarios específicos para proporcionar ciertas características opcionales. Por lo tanto, se exigen mayores demandas a la puerta de enlace API de microservicios, como:

  • Observabilidad: En el pasado, la solución de problemas en aplicaciones monolíticas a menudo se hacía revisando los registros en busca de mensajes de error y pilas de excepciones. Sin embargo, en una arquitectura de microservicios con muchos servicios, el diagnóstico de problemas se vuelve muy difícil. Por lo tanto, cómo monitorear el funcionamiento de los microservicios y proporcionar alertas rápidas cuando ocurren anomalías representa un gran desafío para los desarrolladores.
  • Autenticación y Autorización: En una arquitectura de microservicios, una aplicación se divide en varias microaplicaciones, que necesitan autenticar el acceso y ser conscientes del usuario actual y sus permisos. El método de autenticación en la arquitectura de aplicaciones monolíticas no es adecuado, especialmente cuando el acceso no solo proviene de un navegador sino también de otras llamadas de servicios. En una arquitectura de microservicios, se deben considerar varios escenarios de autenticación, incluido el acceso de aplicaciones externas, autenticación de usuario-servicio y autenticación de servicio-servicio.
  • Estabilidad del sistema: Si el número de solicitudes excede la capacidad de procesamiento de un microservicio, puede saturar el servicio, incluso causando un efecto en cascada que afecte la estabilidad general del sistema.
  • Descubrimiento de servicios: La gestión descentralizada de los microservicios también presenta desafíos para la implementación del balanceo de carga.

Soluciones

La puerta de enlace API, como el puente intermedio entre el cliente y el servidor, proporciona un mecanismo de gestión unificado para el sistema de microservicios. Además de las funciones básicas como la distribución de solicitudes, gestión de APIs y enrutamiento condicional, también incluye autenticación de identidad, monitoreo y alertas, análisis de seguimiento, balanceo de carga, limitación de tasa, aislamiento y corte de circuito.

Autenticación de identidad: El siguiente diagrama ilustra cómo los microservicios se unen con una puerta de enlace API para la autenticación de identidad, donde todas las solicitudes pasan por la puerta de enlace, ocultando efectivamente los microservicios.

Autenticación de puerta de enlace API en microservicios

Monitoreo y Alertas/Análisis de Seguimiento:

Como intermediario entre el cliente y el servidor, la puerta de enlace API es un excelente portador para monitorear los microservicios.

La responsabilidad principal de la función de monitoreo de la puerta de enlace API es detectar anomalías de conexión entre la puerta de enlace y los servidores backend de manera oportuna. Los usuarios pueden ver información de registros, información de monitoreo, seguimiento, etc. en la plataforma de monitoreo para la API. Además, cualquier anomalía que surja en el host se reportará automáticamente al panel de control. Puertas de enlace específicas pueden emitir alertas duales tanto al cliente como al servidor.

Diagrama de Monitoreo y Análisis de Seguimiento

Limitación de tasa, aislamiento y corte de circuito:

A medida que la escala de los negocios en Internet continúa aumentando, también lo hace la concurrencia de los sistemas. Múltiples servicios suelen ser llamados entre sí, y un enlace central puede llamar hasta diez servicios. Si el RT (tiempo de respuesta) de un servicio determinado aumenta drásticamente y los servicios upstream continúan solicitando, ocurrirá un ciclo vicioso. Cuanto más esperen los servicios upstream los resultados, más servicios upstream se bloquearán, y todo el proceso eventualmente se volverá inutilizable, lo que llevará a una avalancha de servicios.

Por lo tanto, es necesario regular y gestionar el tráfico entrante. El siguiente diagrama muestra cómo los sistemas de microservicios combinan puertas de enlace API para realizar limitación de tasa, aislamiento y corte de circuito.

Limitación de tasa, aislamiento y corte de circuito

Selección de puertas de enlace principales

Hay muchas implementaciones de puertas de enlace de código abierto disponibles en microservicios, incluyendo NGINX, Kong, Apache APISIX y Envoy. Para la pila tecnológica de Java, hay opciones como Netflix Zuul, Spring Cloud Gateway, Soul, etc. Pero quizás te preguntes, "¿Por qué elegirías Apache APISIX en lugar de NGINX y Kong?".

Aquí hay una breve comparación.

Puerta de EnlacePuntos de dolorVentajas
NGINX1. Se requiere recargar para que los cambios surtan efecto en la configuración, lo que no puede seguir el ritmo del progreso de las tecnologías nativas de la nube.1. Aplicaciones antiguas;
2. Estable, confiable y probado en el tiempo;
3. Alto rendimiento
Apache APISIX1. La documentación no es lo suficientemente rica o clara y necesita mejoras.1. Proyecto de nivel superior de la Fundación Apache;
2. La arquitectura técnica está más alineada con los principios nativos de la nube;
3. Excelente rendimiento;
4. Ecosistema rico;
5. Además de admitir complementos de desarrollo en Lua, también admite complementos de lenguaje para Java, Go, Python, Node y otros.
Kong1. El uso predeterminado de bases de datos PostgreSQL o Cassandra hace que toda la arquitectura sea muy voluminosa y puede traer problemas de alta disponibilidad;
2. El enrutamiento utiliza un algoritmo de búsqueda por recorrido, lo que puede llevar a una disminución significativa en el rendimiento cuando hay más de miles de rutas en la puerta de enlace;
3. Algunas características importantes requieren pago;
1. El pionero de las puertas de enlace API de código abierto con una gran base de usuarios;
2. El rendimiento satisface las necesidades de la mayoría de los usuarios;
3. Ecosistema rico;
4. Admite desarrollo de complementos en Lua y Go;
Envoy1. Está desarrollado en C++, lo que dificulta el desarrollo secundario;
2. Además de desarrollar filtros con C++, también admite WASM y Lua.
1. El proyecto graduado de CNCF es más adecuado para escenarios de malla de servicios y admite la implementación de arquitecturas de múltiples lenguajes;
Spring Cloud Gateway1. Aunque la comunidad de Spring es madura, hay una falta de recursos para Gateway.1. La puerta de enlace proporciona una gran cantidad de características listas para usar, que pueden utilizarse a través de la configuración de SpringBoot o llamadas codificadas manualmente;
2. El marco de Spring es altamente extensible con una fuerte escalabilidad, configuración fácil y buen mantenimiento;
3. La comunidad de Spring es madura;
4. Fácil de usar;
5. Conveniente para la pila tecnológica de Java.

Resumen

A medida que el mundo de Internet continúa desarrollándose, las empresas evolucionan rápidamente, lo que lleva a cambios constantes en la arquitectura de los sistemas. La arquitectura de microservicios ha sido ampliamente adoptada por muchas empresas.

A medida que aumenta la cantidad de datos y APIs de los microservicios, es crucial elegir una excelente puerta de enlace API para la gobernanza de alto tráfico.

Este artículo compara puertas de enlace API comunes, destacando sus respectivas ventajas y desventajas. Si estás en el proceso de seleccionar una tecnología de puerta de enlace API, enfrentando problemas de rendimiento en tu sistema de microservicios o buscando construir un sistema de microservicios eficiente y estable, este artículo tiene como objetivo proporcionarte algunas ideas útiles.

Tags: