Patrones de diseño en la nube
Estos patrones de diseño son útiles para crear aplicaciones confiables, escalables y seguras en la nube.
Cada patrón describe el problema al que hace frente, las consideraciones sobre su aplicación y un ejemplo basado en Microsoft Azure. La mayoría de los patrones incluye ejemplos de código o fragmentos de código que muestran cómo implementar el patrón en Azure. Sin embargo, la mayoría de los patrones es importante para todos los sistemas distribuidos, tanto si están hospedados en Azure como en otras plataformas en la nube.
Las cargas de trabajo en la nube son propensas a las falacias de la computación distribuida. Algunos ejemplos de falacias de diseño de nubes son:
- La red es confiable
- La latencia es cero
- El ancho de banda es infinito
- La red es segura
- La topología no cambia
- Hay un administrador
- El control de versiones de componentes es sencillo
- La implementación de observabilidad se puede retrasar
Los patrones de diseño no eliminan nociones como estas, pero pueden ayudar a tomar conciencia de ellas, compensarlas y mitigarlas. Cada modelo de nube tiene sus propias ventajas y desventajas. Debe prestar más atención a por qué está eligiendo un patrón determinado que a cómo implementarlo.
Desafíos del desarrollo en la nube
Administración de datosLa administración de datos es el elemento clave de las aplicaciones en la nube e influye en la mayoría de los atributos de calidad. Los datos se hospedan normalmente en distintas ubicaciones y entre varios servidores para mejorar el rendimiento, la escalabilidad o la disponibilidad. Esto puede presentar varios desafíos. Por ejemplo, se debe mantener la coherencia de los datos y estos deben estar sincronizados entre las diferentes ubicaciones. |
|
Diseño e implementaciónUn buen diseño incluye la coherencia en el diseño e implementación de los componentes, el mantenimiento para simplificar la administración y el desarrollo, y la reutilización para permitir que los componentes y subsistemas se puedan utilizar en otras aplicaciones y escenarios. Las decisiones que se toman durante la fase de diseño e implementación afectan significativamente a la calidad y el costo total de propiedad de las aplicaciones y servicios hospedados en la nube. |
|
MensajeríaLa naturaleza distribuida de las aplicaciones en la nube requiere una infraestructura de mensajería que permite conectar los componentes y servicios, idealmente mediante un acoplamiento flexible, para maximizar la escalabilidad. La mensajería asincrónica se usa ampliamente y ofrece numerosas ventajas, pero también supone desafíos como la ordenación de los mensajes, la administración de mensajes dudosos, la idempotencia, etc. |
Catálogo de patrones
Patrón | Resumen | Category |
---|---|---|
Ambassador | Crea servicios auxiliares que envían solicitudes de red en nombre de una aplicación o servicio de consumidor. | Diseño e implementación, Excelencia operativa |
Anti-Corruption Layer | Implementa una capa de fachada o de adaptador entre una aplicación moderna y un sistema heredado. | Diseño e implementación, Excelencia operativa |
Solicitud y respuesta asincrónicas | Desacople el procesamiento de back-end de un host de front-end en el que el procesamiento de back-end tiene que ser asincrónico, pero en el que, aún así, el front-end necesita una respuesta clara. | Mensajería |
Backends for Frontends | Crea servicios independientes de back-end que determinadas aplicaciones de front-end o interfaces puedan usar. | Diseño e implementación |
Bulkhead | Aísle los elementos de una aplicación en grupos para que, si se produce un error en uno, los demás sigan funcionando. | Confiabilidad |
Cache-Aside | Carga datos a petición en una memoria caché desde un almacén de datos | Administración de datos, Eficiencia del rendimiento |
Organización | Permita a cada servicio decidir cuándo y cómo se procesa una operación empresarial, en lugar de depender de un orquestador central. | Mensajería, Eficiencia del rendimiento |
Circuit Breaker | Controla los errores que pueden tardar una cantidad variable de tiempo en solucionarse durante la conexión a un recurso o servicio remoto. | Confiabilidad |
Comprobación de notificaciones | Divida un mensaje grande en una comprobación de notificaciones y una carga para evitar sobrecargar un bus de mensajes. | Mensajería |
Compensating Transaction | Deshace el trabajo realizado mediante una serie de pasos, que conjuntamente definen una operación definitivamente coherente. | Confiabilidad |
Competing Consumers | Permite que varios consumidores simultáneos procesen los mensajes recibidos en el mismo canal de mensajería. | Mensajería |
Compute Resource Consolidation | Consolida varias tareas u operaciones en una sola unidad de cálculo. | Diseño e implementación |
CQRS | Segrega las operaciones de lectura de datos de las de actualización de datos mediante interfaces independientes. | Administración de datos, Diseño e implementación, Eficiencia del rendimiento |
Sellos de implementación | Implemente varias copias independientes de los componentes de la aplicación, incluidos los almacenes de datos. | Confiabilidad Eficiencia del rendimiento |
Configuración de la carga de trabajo perimetral | La gran variedad de sistemas y dispositivos de la tienda puede hacer que la configuración de la carga de trabajo sea un problema difícil. | Diseño e implementación |
Event Sourcing | Usa un almacén de solo anexar para registrar la serie completa de eventos que describen las acciones realizadas en los datos de un dominio. | Administración de datos, Eficiencia del rendimiento |
External Configuration Store | Extrae la información de configuración del paquete de implementación de la aplicación y la lleva a una ubicación centralizada. | Diseño e implementación, Excelencia operativa |
Federated Identity | La autenticación se delega a un proveedor de identidad externo. | Seguridad |
Gatekeeper | Protege aplicaciones y servicios mediante una instancia de host dedicada que actúa como agente entre los clientes y la aplicación o servicio, valida y sanea las solicitudes, y pasa las solicitudes y datos entre ellos. | Seguridad |
Gateway Aggregation | Usa una puerta de enlace para agregar varias solicitudes individuales en una sola solicitud. | Diseño e implementación, Excelencia operativa |
Gateway Offloading | Descarga una funcionalidad de servicio compartida o especializada en un proxy de puerta de enlace. | Diseño e implementación, Excelencia operativa |
Gateway Routing | Enruta las solicitudes a varios servicios mediante un solo punto de conexión. | Diseño e implementación, Excelencia operativa |
Geodes | Implementar servicios back-end en un conjunto de nodos geográficos, cada uno de los cuales puede atender la solicitud de cualquier cliente en cualquier región. | Confiabilidad Excelencia operativa |
Health Endpoint Monitoring | Implementa comprobaciones funcionales en una aplicación a la que pueden acceder herramientas externas a través de los puntos de conexión expuestos en intervalos regulares. | Confiabilidad Excelencia operativa |
Index Table | Crea índices en los campos de los almacenes de datos a los que suelen hacer referencia las consultas. | Administración de datos, Eficiencia del rendimiento |
Leader Election | Coordina las acciones realizadas por una colección de instancias de tareas de colaboración de una aplicación distribuida mediante la elección de una instancia como líder que asume la responsabilidad de administrar las demás instancias. | Diseño e implementación, Confiabilidad |
Materialized View | Genera vistas rellenadas previamente de los datos en uno o más almacenes de datos cuando los datos no tienen el formato idóneo para las operaciones de consulta requeridas. | Administración de datos, Excelencia operativa, Eficiencia del rendimiento |
Pipes and Filters | Desglosa una tarea que realiza un procesamiento complejo en una serie de elementos independientes que se pueden volver a utilizar. | Diseño e implementación, Mensajería |
Priority Queue | Clasifica por orden de prioridad las solicitudes enviadas a los servicios para que aquellas con una prioridad más alta se reciban y procesen más rápidamente que las que tienen una prioridad más baja. | Mensajería, Eficiencia del rendimiento |
Publicador y suscriptor | Permita que una aplicación anuncie eventos de forma asincrónica a varios consumidores interesados, sin necesidad de emparejar los remitentes con los receptores. | Mensajería |
Queue-Based Load Leveling | Usa una cola que actúa como búfer entre una tarea y un servicio que invoca para equilibrar cargas pesadas intermitentes. | Confiabilidad Mensajería, Resistencia, Eficiencia del rendimiento |
Patrón de límite de frecuencia | Puede usar un patrón de limitación para ayudarle a evitar o minimizar los errores de limitación relacionados con estos límites y para ayudarle a predecir con más precisión el rendimiento. | Confiabilidad |
Retry | Permite que una aplicación trate los errores temporales anticipados cuando intenta conectarse a un servicio o un recurso de red, mediante el reintento de forma transparente de una operación que anteriormente produjo error. | Confiabilidad |
Saga | Administre la coherencia de los datos entre los microservicios en escenarios de transacciones distribuidas. Una saga es una secuencia de transacciones que actualiza cada servicio y publica un mensaje o evento para desencadenar el siguiente paso de la transacción. | Mensajería |
Scheduler Agent Supervisor | Coordina un conjunto de acciones en un conjunto distribuido de servicios y otros recursos remotos. | Mensajería, Confiabilidad |
Convoy secuencial | Procesa un conjunto de mensajes relacionados en un orden definido, sin bloquear el procesamiento de otros grupos de mensajes. | Mensajería |
Sharding | Divida un almacén de datos en un conjunto de particiones horizontales o particiones de base de datos. | Administración de datos, Eficiencia del rendimiento |
Sidecar | Implementa componentes de una aplicación en un proceso o contenedor independientes para proporcionar aislamiento y encapsulación. | Diseño e implementación, Excelencia operativa |
Static Content Hosting | Implemente contenido estático en un servicio de almacenamiento basado en la nube que pueda entregarlo directamente al cliente. | Diseño e implementación, Administración de datos, Eficiencia del rendimiento |
Fig Strangler | Migra de forma incremental un sistema heredado reemplazando gradualmente funciones específicas por los servicios y aplicaciones nuevas. | Diseño e implementación, Excelencia operativa |
Limitaciones | Controlan el consumo de recursos que usa una instancia de una aplicación, un inquilino individual o un servicio completo. | Confiabilidad Eficiencia del rendimiento |
Valet Key | Usa un token o clave que proporciona a los clientes acceso directo restringido a un recurso o servicio específico. | Administración de datos, Seguridad |