Red de conocimiento informático - Conocimiento del nombre de dominio - Modo de agregación de puerta de enlace de microservicios

Modo de agregación de puerta de enlace de microservicios

Utilice una puerta de enlace para agregar varias solicitudes individuales en una sola solicitud. Este patrón es útil cuando el cliente debe realizar varias llamadas a diferentes sistemas backend.

A veces, al realizar una sola tarea, un cliente puede necesitar realizar varias llamadas a un único servicio backend diferente. Dado que dependen de múltiples servicios, los clientes deben llamar a diferentes interfaces de servicio para completar las solicitudes, lo que generará demasiadas solicitudes y desperdiciará muchos recursos. Cuando una aplicación agrega funciones o servicios nuevos, aumenta aún más los requisitos de recursos y las llamadas de red. Este lío de llamadas entre el cliente y el backend puede afectar negativamente el rendimiento y la escala de su aplicación. La arquitectura de microservicios hace que este problema sea más frecuente, ya que las aplicaciones creadas en torno a muchos servicios pequeños naturalmente tendrán más llamadas entre servicios.

En el siguiente diagrama, el cliente envía una solicitud a cada servicio (1,2,3). Cada servicio maneja la solicitud y envía la respuesta a la aplicación (4,5,6). Las redes móviles suelen tener una latencia alta y enviar solicitudes individualmente de esta manera es ineficiente y puede provocar conexiones interrumpidas o solicitudes incompletas. Aunque cada solicitud se puede completar en paralelo, la aplicación debe enviar, esperar y procesar datos para cada solicitud en una conexión separada, lo que aumenta la probabilidad de falla.

Utilizar una puerta de enlace para minimizar las interferencias entre clientes y servicios. La puerta de enlace recibe las solicitudes de los clientes, las envía a varios sistemas de backend y luego agrega los resultados y los envía de vuelta al cliente solicitante.

Este modo reduce efectivamente la cantidad de solicitudes que la aplicación realiza al servicio backend, lo que aporta enormes mejoras de rendimiento a las aplicaciones en redes de alta latencia.

En el siguiente diagrama, la aplicación envía una solicitud (1) a la puerta de enlace. Esta solicitud contiene un conjunto de solicitudes adicionales. La puerta de enlace desglosa estas solicitudes y maneja cada solicitud enviándola al servicio correspondiente (2). Cada servicio devuelve una respuesta (3) a la puerta de enlace. La puerta de enlace agrega las respuestas de cada servicio y envía las respuestas a la aplicación (4). La aplicación realiza una solicitud y solo recibe una respuesta de la puerta de enlace.

1. La puerta de enlace no debe introducir acoplamiento de servicios en el servicio backend.

2. La puerta de enlace debe estar cerca del servicio backend para minimizar la latencia.

3. Es posible que el servicio de puerta de enlace necesite algo de trabajo. Asegúrese de que la puerta de enlace esté bien diseñada para cumplir con los requisitos de disponibilidad de la aplicación.

4. La puerta de enlace puede convertirse en un cuello de botella en el rendimiento. Asegúrese de que la puerta de enlace tenga suficiente rendimiento para manejar la carga y pueda escalarse para satisfacer el crecimiento esperado.

5. Pruebe la carga de la puerta de enlace para asegurarse de que no cause fallas en cascada en el servicio.

6. Habilite el diseño resiliente utilizando técnicas como muros, desconexiones, reintentos y tiempos de espera.

7. Si una o más llamadas de servicio tardan demasiado, acepte un tiempo de espera y devuelva un conjunto de datos parcial. Considere cómo su aplicación manejará esta situación.

8. Utilice E/S asincrónicas para mejorar el rendimiento del programa.

9. Utilice el rastreo distribuido para monitorear todo el enlace.

10. Supervisar las métricas de las solicitudes y el tamaño de las respuestas.

11. Considere el almacenamiento en caché de datos como una estrategia de conmutación por error para manejar fallas.

12. En lugar de crear la agregación en la puerta de enlace, considere colocar el servicio de agregación detrás de la puerta de enlace. La agregación de solicitudes puede tener requisitos de recursos diferentes a los de otros servicios en la puerta de enlace y puede afectar las capacidades de enrutamiento y descarga de la puerta de enlace.

1. El cliente necesita comunicarse con múltiples servicios backend para completar la operación.

2. El cliente puede utilizar una red con mayor latencia, como una red celular.

1. Quiere que el cliente realice múltiples solicitudes a un solo servicio (por ejemplo, para obtener información sobre 10 estudiantes y solo tiene una interfaz para consultar la información de los estudiantes). En este caso, es mejor agregar operaciones masivas al servicio.

2. El cliente o la aplicación está ubicado cerca del servicio backend y la latencia no es un factor importante.

El siguiente ejemplo le enseñará cómo crear un servicio NGINX de agregación de puerta de enlace simple utilizando Lua.