Dentro de los patrones de diseño de modernización más utilizados en la nube de AWS para el desarrollo de aplicaciones modernas, destaca el creciente uso de las arquitecturas de microservicios.
A diferencia de las aplicaciones monolíticas tradicionales, las aplicaciones de microservicios son más detalladas y tienen dominios de errores independientes, ya que se ejecutan como servicios distribuidos en toda la red.
Este enfoque permite escalabilidad horizontal efectiva y una gestión más eficiente. En este blog exploraremos algunos de los patrones de diseño más populares en AWS para desarrolladores que abordan los escenarios más típicos en la arquitectura de microservicios.
Patrón de aprovisionamiento de eventos (Event sourcing pattern)
En las arquitecturas basadas en eventos, se utiliza un almacén de datos para almacenar los eventos que provocan un cambio de estado.
VENTAJAS |
DESVENTAJAS |
Captura y mantiene un historial completo de los cambios de estado. |
Tamaño y costo de almacén de eventos. |
Permite auditar, trazar y analizar los estados pasados. |
Complejidad en la implementación y escalado. |
Posibilita la comunicación asíncrona entre servicios. |
Por lo general, no existe garantía de entrega de mensajes. |
En la siguiente imagen se muestra como el servicio de Amazon Kinesis Data se utiliza como almacén de eventos. Será el encargado de capturar y administrar los eventos generados en la aplicación, ofreciendo una solución en tiempo real con alto rendimiento.
Patrón de publicación/suscripción (Pub/Sub pattern)
Se trata de un patrón que de mensajería que desvincula al remitente de un mensaje (publicador) de los receptores interesados (suscriptores). Se produce una comunicación asíncrona a través de un intermediario conocido como enrutador o agente de mensajes.
VENTAJAS |
DESVENTAJAS |
Delegación de la entrega de mensajes en la infraestructura subyacente. |
Mensajes caducan si no se procesan en un intervalo de tiempo establecido. |
Mejora en la escalabilidad. |
Duplicación de mensajes. |
Posibilita la comunicación asíncrona entre servicios. |
Por lo general, no existe garantía de entrega de mensajes. |
Desvinculación de publicadores y suscriptores. |
|
En la siguiente imagen se muestra como el servicio de Amazon Simple Notification Service (Amazon SNS) se utiliza como servicio para desacoplar los publicadores de los suscriptores.
Patrón de enrutamiento de API (API routing pattern)
Este patrón permite gestionar y dirigir el trafico de solicitudes para interactuar con un grupo de servicios. Existen diferentes tipos para exponer las APIs:
Patrón de enrutamiento por nombres de host (Hostname routing pattern)
Realiza el enrutamiento de las peticiones utilizando nombres de host.
VENTAJAS |
DESVENTAJAS |
Implementación sencilla. |
Registro del dominio o subdominio. |
Facilita el aislamiento. |
|
La siguiente imagen muestra como se redirige el tráfico a los servicios a través de los nombres de host.
Patrón de enrutamiento por rutas (Path routing pattern)
Este tipo de patrón permite agrupar el enrutamiento bajo un mismo nombre de host y utilizar identificadores para redirigir el tráfico a los distintos servicios.
En la siguiente imagen se muestra como a través del servicio de Amazon API Gateway se expone el nombre de host como api.example.com que utiliza diversos identificadores para redirigir el tráfico a los servicios como /service-a, /service-b y /service-c.
Las ventajas e inconvenientes de utilizar dicho patrón con el servicio de Amazon API Gateway son las siguientes:
VENTAJAS |
DESVENTAJAS |
Permite autenticación mediante otros servicios como IAM o Cognito. |
Con un volumen alto, el costo es elevado. |
Rastreo y análisis de solicitudes mediante AWS X-Ray. |
|
Integración de firewall mediante AWS WAF. |
|
Limitación de solicitudes. |
|
Conclusión
En conclusión, se ha explorado algunos de los patrones de diseño más populares en AWS para desarrolladores, sin embargo, existen otros cuya elección dependerá del caso de uso específico.
La nube de AWS ofrece una cantidad incontable de recursos y servicios que permiten a los developers seleccionar y combinar para implementar los patrones que mejor se adapten a sus necesidades particulares.
Blogs Relacionados:
> AWS DevOps: Integración fácil y entrega continua
> Automatización de infraestructura en la nube: Terraform + Gitlab