En esta ocasión quiero compartirles un artículo en donde podrán encontrar distintos patrones bastante útiles y frecuentes en escenarios de Cloud Computing.

En cada patrón podrán encontrar el escenario de uso, el problema, la solución, consideraciones y código de ejemplo.

En los siguientes links se encuentra el libro con patrones de diseño cloud y códigos de ejemplo.

Para la implementación de muchos de estos patrones en Azure podemos utilizar toda la plataforma que ya resuelve muchos de estos escenarios y están disponibles para que los utilicemos de diversas formas.

Descargar libro de patrones de diseño en cloud

Descargar códigos de ejemplo de los patrones.

Cache-aside Pattern

Cargar datos bajo demanda en un cache desde una fuente de almacenamiento. Este patrón puede ayudar a mejorar la performance y ayudar a mantener la consistencia entre los datos del cache y de la fuente original.

cache

Circuit Breaker Pattern

Este patrón sirve para escenarios en donde se requiere tener la capacidad de manejar fallos cuando el tiempo para restablecer un servicio o recurso puede ser muy variable. Este patrón puede mejorar la estabilidad y flexibilidad de una aplicación.

circuit

Compensating Transaction Pattern

El siguiente patrón sirve para trabajar en el escenario de tener que deshacer una serie de pasos realizados, que en conjunto significan una operación consistente y determinada. Esto generalmente es necesario cuando una o más operaciones de la serie de pasos falla.

Este tipo de patrones generalmente es necesario cuando estamos operando con distintos repositorios y no es posible propagar transacción o bien algunos de ellos no lo soportan, siendo necesario aplicar mecanismos de compensación.

compensating

Competing Consumers Pattern

Disponer de múltiples consumidores en simultaneo para procesar mensajes mensajes que son recibidos por un mismo canal. El patrón permite que un sistema procese varios mensajes al mismo tiempo para optimizar el tiempo, para mejorar la escalabilidad y para equilibrar la carga de trabajo.

competing

Compute Resource Consolidation Pattern

Consolidar múltiples tareas u operaciones en una sola unidad de computo. Este patrón puede aumentar la reutilización de los recursos de cómputo, y reducir los costos y los gastos generales de gestión asociados a realizar  procesamiento independientes en las aplicaciones alojadas en la nube.

compute resources

Command and Query Responsibility Segregation (CQRS) Pattern

Separar las operaciones que leen datos de las que actualizan, mediante el uso de interfaces. Este patrón puede maximizar el rendimiento, la escalabilidad y la seguridad; mejorar la capacidad de mantenimiento y evolución del sistema.

command and query

Event Sourcing Pattern

Este patrón puede simplificar las tareas en dominios complejos, evitando la necesidad de sincronizar el modelo de datos y el dominio de negocio; mejorar el rendimiento, escalabilidad y capacidad de respuesta; garantizar la coherencia de los datos transaccionales; y mantener los datos de auditoría completas y la historia de acciones que permiten implementar métodos de compensación.

Event

External Configuration Store Pattern

Mover información de configuración del paquete de implementación de la aplicación a una ubicación centralizada. Este patrón puede proporcionar oportunidades para la gestión y control de los datos de configuración más fácil, y para el intercambio de datos de configuración de todas las aplicaciones y escenarios.

external

Federated Identity Pattern

Delegar la autenticación a un proveedor de identidad externa. Este patrón puede simplificar el desarrollo, minimizar la necesidad de administración de usuarios, y mejorar la experiencia del usuario de la aplicación.

federated

Gatekeeper Pattern

Proteger las aplicaciones y servicios mediante el uso de una instancia de host dedicado que actúa como un intermediario entre los clientes y la aplicación o servicio, valida peticiones, y pasa las solicitudes y datos entre ellos. Este patrón puede proporcionar una capa adicional de seguridad, y limitar la superficie de ataque del sistema. 

Getekeeper

Health Endpoint Monitoring Pattern

Implementar checks sobre endpoints de la aplicación mediante la utilización de herramientas externas que permitan monitorearlos en intervalos definidos. Este patrón puede ayudar a verificar que las aplicaciones y los servicios están funcionando correctamente.

health

Index Table Pattern

Crear índices en los campos de almacenamientos que con frecuencia se hace referencia en criterios de consultas. Este patrón puede mejorar el rendimiento de consulta, al permitir que las aplicaciones recuperen más rápidamente los datos de un almacén de datos.

index

Leader Election Pattern

Coordinar las acciones realizadas por una colección de instancias (de tareas) en una aplicación distribuida por la elección de una instancia como el líder que asume la responsabilidad de la gestión de los otros casos. Este patrón puede ayudar a asegurar que las tareas no entren en conflicto entre sí, causar concurrencia de recursos compartidos, o sin querer interferir con el trabajo que otras instancias de tareas se están realizando.

leader

Materialized View Pattern

Generar vistas pre-pobladas de los datos cuando tiene un formato que no favorece las operaciones de consulta. Este patrón puede ayudar a mejorar la eficacia de las consultas y la extracción de datos. Mejora el rendimiento de la aplicación.

materialized

Pipes and Filters Pattern

Descomponer una tarea que lleva a cabo un procesamiento complejo en una serie de elementos discretos que pueden ser reutilizados. Este patrón puede mejorar el rendimiento, la escalabilidad y reusabilidad al permitir tareas que se despliegan y escala de forma independiente.

Pipes

Priority Queue Pattern

Dar prioridad a las solicitudes enviadas a los servicios. Las solicitudes con mayor prioridad se reciben y procesan más rápidamente que los de menor prioridad. Este patrón es útil en aplicaciones que ofrecen diferentes niveles de servicio a los distintos tipos de cliente.

Priority

Queue-based Load Leveling Pattern

Utilice una cola que actúa como un amortiguador de carga entre un proceso y un servicio. Este patrón puede ayudar a minimizar el impacto de los picos en la demanda de la disponibilidad y capacidad de respuesta tanto para el proceso como para el servicio.

queue

Retry Pattern

Habilitar una aplicación para manejar las fallas temporales cuando se conecta a un servicio o recurso de red mediante reintentos. Este patrón puede mejorar la estabilidad de la aplicación.

retry

Runtime Reconfiguration Pattern

Diseñar una aplicación de modo que pueda ser reconfigurada sin necesidad de redistribución o reiniciar la aplicación. Esto ayuda a mantener la disponibilidad y minimizar el tiempo de inactividad.

runtime

Scheduler Agent Supervisor Pattern

Coordinar un conjunto de acciones a través de un conjunto distribuido de servicios y otros recursos remotos. Tratar de manejar de forma transparente los fallos si alguna de estas acciones fallan, o deshacer los efectos del trabajo realizado si el sistema no puede recuperarse de un fallo. Este patrón puede añadir resistencia a un sistema distribuido por lo que le permite recuperar y volver a intentar las acciones que fallen debido a excepciones transitorias. 

scheduler

Sharding Pattern

Dividir un almacén de datos en un conjunto de particiones horizontales. Este patrón puede mejorar la escalabilidad cuando requerimos almacenar y acceder a grandes volúmenes de datos.

sharding

Static Content Hosting Pattern

Implementar contenido estático a un servicio de almacenamiento basado en la nube que puede ofrecer estos directamente al cliente. Este patrón puede reducir la necesidad de instancias de proceso.

static

Throttling Pattern

Controlar el consumo de los recursos utilizados por una instancia de una aplicación. Este patrón puede permitir que el sistema siga funcionando y cumplir con los acuerdos de nivel de servicio, aun cuando un aumento de la demanda supone una carga extrema de los recursos.

throttling

Valet Key Pattern

Utilice una clave que ofrece a sus clientes acceso directo restringido a un recurso o servicio específico con el fin de disminuir operaciones de transferencia de datos desde la aplicación. Este patrón es particularmente útil en aplicaciones que utilizan sistemas o colas de almacenamiento alojados en la nube, y puede minimizar los costos y maximizar la escalabilidad y el rendimiento.

valet