Compartir vía


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 datos

Administración de datos

La 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ón

Diseño e implementación

Un 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.

Icono de mensajes

Mensajería

La 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