Patrones de diseño en la nubeCloud Design Patterns

Estos patrones de diseño son útiles para crear aplicaciones confiables, escalables y seguras en la nube.These design patterns are useful for building reliable, scalable, secure applications in the cloud.

Cada patrón describe el problema al que hace frente, las consideraciones sobre su aplicación y un ejemplo basado en Microsoft Azure.Each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. La mayoría incluye ejemplos de código o fragmentos de código que muestran cómo implementar el patrón en Azure.Most of the patterns include code samples or snippets that show how to implement the pattern on 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.However, most of the patterns are relevant to any distributed system, whether hosted on Azure or on other cloud platforms.

Desafíos del desarrollo en la nubeChallenges in cloud development

Availability

DisponibilidadAvailability

La disponibilidad es la proporción de tiempo que el sistema está operativo y en funcionamiento, normalmente se mide como un porcentaje del tiempo de actividad.Availability is the proportion of time that the system is functional and working, usually measured as a percentage of uptime. Los errores del sistema, los problemas de infraestructura, los ataques malintencionados y la carga del sistema pueden afectar a la disponibilidad.It can be affected by system errors, infrastructure problems, malicious attacks, and system load. Las aplicaciones en la nube suelen proporcionar a los usuarios un Acuerdo de Nivel de Servicio, por lo que las aplicaciones se deben diseñar para maximizar la disponibilidad.Cloud applications typically provide users with a service level agreement (SLA), so applications must be designed to maximize availability.

Data Management

Administración de datosData Management

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.Data management is the key element of cloud applications, and influences most of the quality attributes. Los datos se hospedan normalmente en distintas ubicaciones y entre varios servidores por motivos tales como el rendimiento, la escalabilidad o la disponibilidad, lo cual puede conllevar varios desafíos.Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. Por ejemplo, se debe mantener la coherencia de los datos y estos deben estar sincronizados entre las diferentes ubicaciones.For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and Implementation

Diseño e implementaciónDesign and Implementation

Un buen diseño incluye factores como 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.Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. Las decisiones tomadas durante la fase de diseño e implementación tienen un gran impacto en la calidad y el costo total de propiedad de las aplicaciones y servicios hospedados en la nube.Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.

Messaging

MensajeríaMessaging

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.The distributed nature of cloud applications requires a messaging infrastructure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. 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.Asynchronous messaging is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idempotency, and more

Management and Monitoring

Administración y supervisiónManagement and Monitoring

Las aplicaciones en la nube se ejecutan en un centro de datos remoto en el que no tiene un control completo de la infraestructura ni, en algunos casos, del sistema operativo.Cloud applications run in in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. Esto puede hacer que la administración y la supervisión sean más complejas que en una implementación local.This can make management and monitoring more difficult than an on-premises deployment. Las aplicaciones deben exponer la información del entorno de ejecución que los administradores y operadores pueden usar para administrar y supervisar el sistema, así como dar soporte a los cambios en los requisitos empresariales y de personalización sin necesidad de detener o volver a implementar la aplicación.Applications must expose runtime information that administrators and operators can use to manage and monitor the system, as well as supporting changing business requirements and customization without requiring the application to be stopped or redeployed.

Performance and Scalability

Rendimiento y escalabilidadPerformance and Scalability

El rendimiento es un indicativo de la capacidad de respuesta de un sistema a la hora de ejecutar cualquier acción dentro de un intervalo de tiempo determinado, mientras que la escalabilidad es la capacidad que tiene un sistema para controlar los aumentos de carga sin que afecte al rendimiento o para aumentar los recursos disponibles en el momento adecuado.Performance is an indication of the responsiveness of a system to execute any action within a given time interval, while scalability is ability of a system either to handle increases in load without impact on performance or for the available resources to be readily increased. Las aplicaciones en la nube normalmente se encuentran con cargas de trabajo variables y picos en la actividad.Cloud applications typically encounter variable workloads and peaks in activity. Predecir estos, especialmente en un escenario multiinquilino, es casi imposible.Predicting these, especially in a multi-tenant scenario, is almost impossible. En lugar de eso, las aplicaciones se deben poder escalar horizontalmente dentro de ciertos límites para satisfacer los picos de demanda, y reducir horizontalmente cuando la demanda disminuya.Instead, applications should be able to scale out within limits to meet peaks in demand, and scale in when demand decreases. La escalabilidad no se refiere solo a instancias de proceso, sino también a otros elementos como el almacenamiento de datos, la infraestructura de mensajería, etc.Scalability concerns not just compute instances, but other elements such as data storage, messaging infrastructure, and more.

Resiliency

ResistenciaResiliency

La resistencia es la capacidad de un sistema para manejar los errores y recuperarse de ellos satisfactoriamente.Resiliency is the ability of a system to gracefully handle and recover from failures. La naturaleza del hospedaje en la nube, donde las aplicaciones a menudo son multiinquilino, usan servicios de plataforma compartidos, compiten por los recursos y el ancho de banda, y se ejecutan en hardware estándar, implica que hay una mayor probabilidad de que se produzcan errores transitorios o permanentes.The nature of cloud hosting, where applications are often multi-tenant, use shared platform services, compete for resources and bandwidth, communicate over the Internet, and run on commodity hardware means there is an increased likelihood that both transient and more permanent faults will arise. La detección de errores y una recuperación de ellos que sea rápida y eficaz, son necesarias para mantener la resistencia.Detecting failures, and recovering quickly and efficiently, is necessary to maintain resiliency.

Security

SeguridadSecurity

La seguridad es la capacidad de un sistema para impedir acciones malintencionadas o involuntarias que se salgan del uso para el que fue diseñado, y para impedir la revelación o pérdida de información.Security is the capability of a system to prevent malicious or accidental actions outside of the designed usage, and to prevent disclosure or loss of information. Las aplicaciones en la nube están expuestas en Internet, más allá de los límites locales de confianza y, a menudo, están abiertas al público y pueden dar servicio a usuarios que no son de confianza.Cloud applications are exposed on the Internet outside trusted on-premises boundaries, are often open to the public, and may serve untrusted users. Se deben diseñar e implementar las aplicaciones de forma que se las proteja frente a ataques malintencionados, se restrinja el acceso solo a los usuarios autorizados y se proteja la información confidencial.Applications must be designed and deployed in a way that protects them from malicious attacks, restricts access to only approved users, and protects sensitive data.

Catálogo de patronesCatalog of patterns

PatrónPattern ResumenSummary
AmbassadorAmbassador Crea servicios de aplicaciones auxiliares que envíen solicitudes de red en nombre de una aplicación o servicio de consumidor.Create helper services that send network requests on behalf of a consumer service or application.
Anti-Corruption LayerAnti-Corruption Layer Implementa una capa de fachada o de adaptador entre una aplicación moderna y un sistema heredado.Implement a façade or adapter layer between a modern application and a legacy system.
Backends for FrontendsBackends for Frontends Crea servicios independientes de back-end que determinadas aplicaciones de front-end o interfaces puedan usar.Create separate backend services to be consumed by specific frontend applications or interfaces.
BulkheadBulkhead Aísla los elementos de una aplicación en grupos para que si se produce un error en uno, los demás sigan funcionando.Isolate elements of an application into pools so that if one fails, the others will continue to function.
Cache-AsideCache-Aside Carga datos a petición en una memoria caché desde un almacén de datosLoad data on demand into a cache from a data store
Circuit BreakerCircuit Breaker Maneja errores que pueden tardar una cantidad variable de tiempo en solucionarse durante la conexión a un recurso o servicio remoto.Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource.
CQRSCQRS Segrega las operaciones de lectura de datos de las de actualización de datos mediante interfaces independientes.Segregate operations that read data from operations that update data by using separate interfaces.
Compensating TransactionCompensating Transaction Deshace el trabajo realizado por una serie de pasos, que conjuntamente definen una operación de coherencia final.Undo the work performed by a series of steps, which together define an eventually consistent operation.
Competing ConsumersCompeting Consumers Permite que varios consumidores simultáneos procesen los mensajes recibidos en el mismo canal de mensajería.Enable multiple concurrent consumers to process messages received on the same messaging channel.
Compute Resource ConsolidationCompute Resource Consolidation Consolida varias tareas u operaciones en una sola unidad de cálculo.Consolidate multiple tasks or operations into a single computational unit
Event SourcingEvent 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.Use an append-only store to record the full series of events that describe actions taken on data in a domain.
External Configuration StoreExternal Configuration Store Mueve la información de configuración fuera del paquete de implementación de la aplicación a una ubicación centralizada.Move configuration information out of the application deployment package to a centralized location.
Federated IdentityFederated Identity La autenticación se delega a un proveedor de identidad externo.Delegate authentication to an external identity provider.
GatekeeperGatekeeper 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.Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them.
Gateway AggregationGateway Aggregation Usa una puerta de enlace para agregar varias solicitudes individuales en una sola solicitud.Use a gateway to aggregate multiple individual requests into a single request.
Gateway OffloadingGateway Offloading Descarga una funcionalidad compartida o especializada en un proxy de puerta de enlace.Offload shared or specialized service functionality to a gateway proxy.
Gateway RoutingGateway Routing Enruta las solicitudes a varios servicios mediante un solo punto de conexión.Route requests to multiple services using a single endpoint.
Health Endpoint MonitoringHealth 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.Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals.
Index TableIndex Table Crea índices en los campos de los almacenes de datos a los que suelen hacer referencia las consultas.Create indexes over the fields in data stores that are frequently referenced by queries.
Leader ElectionLeader 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.Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances.
Materialized ViewMaterialized 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.Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations.
Pipes and FiltersPipes and Filters Desglosa una tarea que realiza un procesamiento complejo en una serie de elementos independientes que se pueden volver a utilizar.Break down a task that performs complex processing into a series of separate elements that can be reused.
Priority QueuePriority 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.Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority.
Queue-Based Load LevelingQueue-Based Load Leveling Use una cola que actúe como búfer entre una tarea y un servicio que invoca para equilibrar cargas pesadas intermitentes.Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads.
RetryRetry 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.Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed.
Scheduler Agent SupervisorScheduler Agent Supervisor Coordina un conjunto de acciones en un conjunto distribuido de servicios y otros recursos remotos.Coordinate a set of actions across a distributed set of services and other remote resources.
ShardingSharding Divide un almacén de datos en un conjunto de particiones horizontales o particiones de base de datos.Divide a data store into a set of horizontal partitions or shards.
SidecarSidecar Implementa componentes de una aplicación en un proceso o contenedor independiente para proporcionar aislamiento y encapsulación.Deploy components of an application into a separate process or container to provide isolation and encapsulation.
Static Content HostingStatic Content Hosting Implementa contenido estático en un servicio de almacenamiento basado en la nube que puede enviarlo directamente al cliente.Deploy static content to a cloud-based storage service that can deliver them directly to the client.
StranglerStrangler Migra de forma incremental un sistema heredado reemplazando gradualmente funciones específicas por los servicios y aplicaciones nuevas.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services.
LimitacionesThrottling Controlan el consumo de recursos que usa una instancia de una aplicación, un inquilino individual o un servicio completo.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service.
Valet KeyValet Key Usa un token o clave que proporciona a los clientes acceso directo restringido a un recurso o servicio específico.Use a token or key that provides clients with restricted direct access to a specific resource or service.