Enrute las solicitudes a varios servicios o varias instancias de servicio mediante un único punto de conexión. El patrón es útil cuando quiere:
- Exponer varios servicios en un único punto de conexión y enrutarlos al servicio adecuado en función de la solicitud
- Exponer varias instancias del mismo servicio en un único punto de conexión con fines de equilibrio de carga o disponibilidad
- Exponer versiones diferentes del mismo servicio en un único punto de conexión y enrutar el tráfico entre las distintas versiones
Contexto y problema
Cuando un cliente necesita consumir varios servicios, varias instancias de servicio o una combinación de ambos, el cliente debe actualizarse cuando se agregan o quitan los servicios. Considere los siguientes escenarios.
- Múltiples servicios dispares: una aplicación de comercio electrónico puede proporcionar servicios como búsqueda, revisiones, carrito, pago e historial de pedidos. Cada servicio tiene una API diferente con la que el cliente debe interactuar, y el cliente debe conocer cada punto de conexión para conectarse a los servicios. Si cambia una API, también se debe actualizar el cliente. Si refactoriza un servicio en dos o más servicios independientes, el código debe cambiar en el servicio y en el cliente.
- Varias instancias del mismo servicio: el sistema puede requerir la ejecución de varias instancias del mismo servicio en las mismas regiones o diferentes. La ejecución de varias instancias se puede realizar con fines de equilibrio de carga o para cumplir los requisitos de disponibilidad. Cada vez que una instancia se activa o reduce para que coincida con la demanda, se debe actualizar el cliente.
- Varias versiones del mismo servicio: como parte de la estrategia de implementación, se pueden implementar nuevas versiones de un servicio a lo largo de las versiones existentes. Esto se conoce como implementaciones verdes-azules. En estos escenarios, el cliente debe actualizarse cada vez que haya cambios en el porcentaje de tráfico que se enruta a la nueva versión y al punto de conexión existente.
Solución
Coloque una puerta de enlace delante de un conjunto de aplicaciones, servicios o implementaciones. Use el enrutamiento del nivel de aplicación 7 para enrutar la solicitud a las instancias adecuadas.
Con este patrón, la aplicación cliente solo necesita conocer un único punto de conexión y comunicarse con un único punto de conexión. A continuación se muestra cómo el patrón de enrutamiento de puerta de enlace aborda los tres escenarios descritos en la sección de contexto y problema.
Varios servicios dispares
El patrón de enrutamiento de puerta de enlace es útil en este escenario en el que un cliente consume varios servicios. Si un servicio se consolida, descompone o reemplaza, el cliente no requiere un actualización necesariamente. Puede seguir realizando solicitudes a la puerta de enlace y solo cambia el enrutamiento.
Una puerta de enlace también ofrece la posibilidad de abstraer los servicios back-end de los clientes. De esta forma, las llamadas de clientes pueden simplificarse y se permiten cambios en estos servicios detrás de la puerta de enlace. Las llamadas de clientes se pueden enrutar a cualquier servicio necesario para administrar el comportamiento esperado de los clientes, lo que le permite agregar, dividir y reorganizar los servicios detrás de la puerta de enlace sin cambiar el cliente.
Varias instancias del mismo servicio
La elasticidad es clave en la informática en la nube. Los servicios se pueden aumentar para satisfacer la creciente demanda o reducir cuando la demanda es baja para ahorrar dinero. La complejidad de registrar y anular el registro de instancias de servicio se encapsula en la puerta de enlace. El cliente no es consciente de un aumento o disminución en el número de servicios.
Las instancias de servicio se pueden implementar en una o varias regiones. El patrón de nodo geográfico detalla cómo una implementación activa-activa de varias regiones puede mejorar la latencia y aumentar la disponibilidad de un servicio.
Varias versiones del mismo servicio
Este patrón se puede usar para implementaciones, ya que le permite administrar cómo se implementan las actualizaciones para los usuarios. Cuando se implemente una nueva versión de su servicio, se puede hacer en paralelo con la versión existente. El enrutamiento le permite controlar qué versión del servicio se presenta a los clientes, lo que permite usar diversas estrategias de lanzamiento: lanzamientos de actualizaciones incrementales, paralelas o completas. Cualquier problema detectado una vez que se implementa el nuevo servicio se puede revertir rápidamente mediante un cambio en la configuración en la puerta de enlace, sin afectar a los clientes.
Problemas y consideraciones
- El servicio de puerta de enlace puede introducir un único punto de error. Asegúrese de que esté diseñado correctamente para satisfacer sus necesidades de disponibilidad. Considere las funcionalidades de resistencia y tolerancia a errores en la implementación.
- El servicio de puerta de enlace puede introducir un cuello de botella. Asegúrese de que la puerta de enlace tenga un rendimiento adecuado para administrar la carga y que pueda escalarse fácilmente en línea con sus expectativas de crecimiento.
- Realice pruebas de carga en la puerta de enlace para asegurarse de que no introduce errores en cascada en los servicios.
- El enrutamiento de puerta de enlace es de nivel 7. Se puede basar en la dirección IP, el puerto, el encabezado o la dirección URL.
- Los servicios de puerta de enlace pueden ser globales o regionales. Azure Front Door es una puerta de enlace global, mientras que Azure Application Gateway es regional. Use una puerta de enlace global si la solución requiere implementaciones de servicios de varias regiones. Considere la posibilidad de usar Application Gateway si tiene una carga de trabajo regional que requiere un control pormenorizado de cómo se equilibra el tráfico. Por ejemplo, quiere equilibrar el tráfico entre máquinas virtuales.
- El servicio de puerta de enlace es el punto de conexión público de los servicios frente a los que se encuentra. Considere la posibilidad de limitar el acceso de red pública a los servicios back-end, ya que los servicios solo son accesibles a través de la puerta de enlace o a través de una red virtual privada.
Cuándo usar este patrón
Use este patrón en los siguientes supuestos:
- Un cliente deba usar varios servicios a los que se pueda acceder detrás de una puerta de enlace.
- Le interesa simplificar las aplicaciones cliente mediante el uso de un único punto de conexión.
- Necesite enrutar las solicitudes desde puntos de conexión externamente direccionables hasta puntos de conexión virtuales internos, por ejemplo, exponer los puertos de una máquina virtual a las direcciones IP virtuales del clúster.
- Un cliente debe consumir servicios que se ejecutan en varias regiones para obtener ventajas de latencia o disponibilidad.
- Un cliente debe consumir un número variable de instancias de servicio.
- Quiere implementar una estrategia de implementación en la que los clientes acceden a varias versiones del servicio al mismo tiempo.
Este patrón puede no ser adecuado si tiene una aplicación sencilla que solo usa uno o dos servicios.
Diseño de cargas de trabajo
El arquitecto debe evaluar cómo se puede usar el patrón de enrutamiento de la puerta de enlace en el diseño de su carga de trabajo para abordar los objetivos y principios tratados en los pilares del Marco de la Well-Architected de Azure. Por ejemplo:
Fundamento | Cómo apoya este patrón los objetivos de los pilares |
---|---|
Las decisiones de diseño de la fiabilidad ayudan a que la carga de trabajo sea resistente a los errores y a garantizar que se recupere a un estado de pleno funcionamiento después de que se produzca un error. | El enrutamiento de puerta de enlace le permite dirigir el tráfico solo a los nodos correctos de su sistema. - RE:05 Redundancia - RE:10 Supervisión del estado |
La excelencia operativa ayuda a ofrecer calidad de carga de trabajo a través de procesos estandarizados y cohesión de equipos. | El enrutamiento de puerta de enlace le permite desacoplar las solicitudes de los back-end, lo que a su vez permite que sus back-end admitan modelos de implementación avanzados, transiciones de plataforma y un único punto de gestión para la resolución de nombres de dominio y el cifrado en tránsito. - OE:04 Herramientas y procesos - OE:11 Procedimientos de implementación seguros |
La eficiencia del rendimiento ayuda a que la carga de trabajo satisfaga eficazmente las demandas mediante optimizaciones en el escalado, los datos y el código. | El enrutamiento de puerta de enlace le permite distribuir el tráfico entre los nodos del sistema para equilibrar la carga. - PE:05 Escapado y particiones |
Al igual que con cualquier decisión de diseño, hay que tener en cuenta las ventajas y desventajas con respecto a los objetivos de los otros pilares que podrían introducirse con este patrón.
Ejemplo
A continuación se muestra un ejemplo sencillo de archivo de configuración de un servidor que enruta solicitudes de aplicaciones que residen en distintos directorios virtuales a diferentes máquinas en el back end mediante el enrutador Ngnix.
server {
listen 80;
server_name domain.com;
location /app1 {
proxy_pass http://10.0.3.10:80;
}
location /app2 {
proxy_pass http://10.0.3.20:80;
}
location /app3 {
proxy_pass http://10.0.3.30:80;
}
}
Los siguientes servicios de Azure se pueden usar para implementar el patrón de enrutamiento de puerta de enlace:
- Una instancia de Application Gateway, que proporciona enrutamiento regional de nivel 7.
- Una instancia de Azure Front Door, que proporciona enrutamiento global de nivel 7.