Patrones de diseño en la nube que admiten la confiabilidad

Al diseñar arquitecturas de cargas de trabajo, debe usar patrones del sector que aborden desafíos comunes. Los patrones pueden ayudarle a compensar intencionadamente las cargas de trabajo y optimizar el resultado deseado. También pueden ayudar a mitigar los riesgos que se originan en problemas específicos, lo que puede afectar a la seguridad, el rendimiento, el costo y las operaciones. Si no se mitiga, esos riesgos provocarán eventualmente problemas de confiabilidad. Estos patrones están respaldados por la experiencia real, están diseñados para modelos operativos y de escala en la nube, y son inherentemente independientes del proveedor. El uso de patrones conocidos como una manera de estandarizar el diseño de la carga de trabajo es un componente de excelencia operativa.

Muchos patrones de diseño admiten directamente uno o varios pilares de arquitectura. Patrones de diseño que admiten el pilar confiabilidad priorizan la disponibilidad de la carga de trabajo, la autoconservación, la recuperación, la integridad de los datos y el procesamiento, y la contención de errores incorrectos.

Patrones de diseño para la confiabilidad

En la tabla siguiente se resumen los patrones de diseño en la nube que admiten los objetivos de confiabilidad.

Patrón Resumen
Ambassador Encapsula y administra las comunicaciones de red descargando tareas transversales relacionadas con la comunicación de red. Los servicios auxiliares resultantes inician la comunicación en nombre del cliente. Este punto de mediación proporciona una oportunidad para agregar patrones de confiabilidad a la comunicación de red, como el reintento o el almacenamiento en búfer.
Backends for Frontends Individualiza la capa de servicio de una carga de trabajo mediante la creación de servicios independientes exclusivos de una interfaz de front-end específica. Debido a esta separación, un mal funcionamiento en el nivel de servicio que admite un cliente podría no afectar a la disponibilidad del acceso de otro cliente. Al tratar varios clientes de forma diferente, puede priorizar los esfuerzos de confiabilidad en función de los patrones de acceso de cliente esperados.
Bulkhead Introduce la segmentación intencionada y completa entre los componentes para aislar el radio de explosión de mal funcionamiento. Esta estrategia de aislamiento de errores intenta contener errores solo en el mamparo que está experimentando el problema, lo que evita el impacto en otros mamparos.
Cache-Aside Optimiza el acceso a los datos leídos con frecuencia mediante la introducción de una memoria caché que se rellena a petición. A continuación, la memoria caché se usa en solicitudes posteriores para los mismos datos. El almacenamiento en caché crea replicación de datos y, de manera limitada, se puede usar para conservar la disponibilidad de los datos a los que se accede con frecuencia si el almacén de datos de origen no está disponible temporalmente. Además, si hay un mal funcionamiento en la memoria caché, la carga de trabajo puede revertir al almacén de datos de origen.
Circuit Breaker Evita las solicitudes continuas a una dependencia que no funciona correctamente o no está disponible. Al hacerlo, este patrón evita la sobrecarga de una dependencia errónea. También puede usar este patrón para desencadenar una degradación correcta en la carga de trabajo. Los disyuntores a menudo se acoplan con la recuperación automática para proporcionar auto-conservación y recuperación automática.
Comprobación de notificaciones Separa los datos del flujo de mensajería, lo que proporciona una manera de recuperar por separado los datos relacionados con un mensaje. Los buses de mensajes no proporcionan la misma confiabilidad y recuperación ante desastres que a menudo están presentes en almacenes de datos dedicados, por lo que separar los datos del mensaje puede proporcionar una mayor confiabilidad para los datos subyacentes. Esta separación también permite un enfoque de recuperación de cola de mensajes después de un desastre.
Compensating Transaction Proporciona un mecanismo para recuperarse de errores al revertir los efectos de las acciones aplicadas anteriormente. Este patrón soluciona errores en las rutas de trabajo críticas mediante acciones de compensación, lo que puede implicar procesos como revertir directamente los cambios de datos, interrumpir bloqueos de transacción o incluso ejecutar el comportamiento del sistema nativo para revertir el efecto.
Competing Consumers Aplica el procesamiento distribuido y simultáneo para controlar eficazmente los elementos de una cola. Este modelo crea redundancia en el procesamiento de colas tratando a los consumidores como réplicas, por lo que un error de instancia no impide que otros consumidores procesen mensajes de cola.
Event Sourcing Trata el cambio de estado como serie de eventos y los captura en un registro inmutable y de solo anexión. Puede usar este patrón cuando un historial confiable de cambios es fundamental en un proceso empresarial complejo. También facilita la reconstrucción del estado si necesita recuperar almacenes de estado.
Federated Identity Delega la confianza en un proveedor de identidades externo a la carga de trabajo para administrar usuarios y proporcionar autenticación para la aplicación. La descarga de la administración de usuarios y la autenticación cambia la confiabilidad de esos componentes al proveedor de identidades, que normalmente tiene un Acuerdo de Nivel de Servicio elevado. Además, durante la recuperación ante desastres de la carga de trabajo, es probable que los componentes de autenticación no necesiten abordarse como parte del plan de recuperación de cargas de trabajo.
Gateway Aggregation Simplifica las interacciones de cliente con la carga de trabajo mediante la agregación de llamadas a varios servicios back-end en una sola solicitud. Esta topología permite cambiar el control transitorio de errores de una implementación distribuida entre clientes a una implementación centralizada.
Gateway Offloading Descarga el procesamiento de solicitudes en un dispositivo de puerta de enlace antes y después de reenviar la solicitud a un nodo back-end. La descarga de esta responsabilidad en una puerta de enlace reduce la complejidad del código de aplicación en los nodos de back-end. En algunos casos, la descarga reemplaza completamente la funcionalidad por una característica confiable proporcionada por la plataforma.
Gateway Routing Enruta las solicitudes de red entrantes a varios sistemas back-end en función de las intenciones de solicitud, la lógica de negocios y la disponibilidad de back-end. El enrutamiento de puerta de enlace le permite enrutar el tráfico solo a nodos correctos del sistema.
Nodo geográfico Implementa sistemas que funcionan en modos de disponibilidad activo-activo en varias zonas geográficas. Este patrón usa la replicación de datos para admitir el ideal para que cualquier cliente pueda conectarse a cualquier instancia geográfica. Puede ayudar a la carga de trabajo a resistir una o varias interrupciones regionales.
Health Endpoint Monitoring Proporciona una manera de supervisar el estado o el estado de un sistema mediante la exposición de un punto de conexión diseñado específicamente para ese propósito. Puede usar este punto de conexión para administrar el estado de la carga de trabajo y para alertas y paneles. También puede usarlo como señal para la corrección automática.
Index Table Optimiza la recuperación de datos en almacenes de datos distribuidos al permitir que los clientes busquen metadatos para que los datos se puedan recuperar directamente, evitando la necesidad de realizar exámenes completos del almacén de datos. Dado que los clientes apuntan a su partición, partición o punto de conexión a través de un proceso de búsqueda, puede usar este patrón para facilitar un enfoque de conmutación por error para el acceso a datos.
Leader Election Establece un líder de instancias de una aplicación distribuida. El líder coordina las responsabilidades relacionadas con la realización de un objetivo. Este patrón mitiga el efecto de los errores de funcionamiento del nodo mediante el redireccionamiento confiable del trabajo. También implementa la conmutación por error a través de algoritmos de consenso cuando un líder no funciona correctamente.
Pipes and Filters Divide el procesamiento de datos complejos en una serie de fases independientes para lograr un resultado específico. La única responsabilidad de cada fase permite la atención centrada y evita la distracción del procesamiento de datos con nombre.
Priority Queue Garantiza que los elementos de prioridad superior se procesan y completan antes de los elementos de prioridad inferior. Separar los elementos en función de la prioridad empresarial le permite centrar los esfuerzos de confiabilidad en el trabajo más crítico.
Publicador y suscriptor Desacopla los componentes de una arquitectura reemplazando la comunicación directa de cliente a servicio o cliente a servicios por la comunicación a través de un agente de mensajes intermedio o un bus de eventos.
Queue-Based Load Leveling Controla el nivel de las solicitudes o tareas entrantes almacenando en búfer en una cola y permitiendo que el procesador de cola los controle a un ritmo controlado. Este enfoque puede proporcionar resistencia frente a picos repentinos de demanda al desacoplar la llegada de tareas de su procesamiento. También puede aislar los errores de funcionamiento en el procesamiento de colas para que no afecten a la ingesta.
Limitación de frecuencia Controla la tasa de solicitudes de cliente para reducir los errores de limitación y evitar escenarios de reintento en error sin enlazar. Esta táctica protege al cliente al reconocer las limitaciones y los costos de comunicarse con un servicio cuando el servicio está diseñado para evitar alcanzar los límites especificados. Funciona controlando el número o el tamaño de las operaciones que se envían al servicio durante un período de tiempo específico.
Retry Soluciona los errores que pueden ser transitorios o intermitentes al reintentar determinadas operaciones de forma controlada. La mitigación de errores transitorios en un sistema distribuido es una técnica clave para mejorar la resistencia de una carga de trabajo.
Transacciones distribuidas saga Coordina transacciones de larga duración y potencialmente complejas mediante la descomposición del trabajo en secuencias de transacciones más pequeñas e independientes. Cada transacción también debe tener acciones de compensación para revertir errores en la ejecución y mantener la integridad. Dado que las transacciones monolíticas en varios sistemas distribuidos suelen ser imposibles, este patrón proporciona coherencia y confiabilidad mediante la implementación de atomicidad y compensación.
Scheduler Agent Supervisor Distribuye y redistribuye eficazmente las tareas en un sistema en función de los factores observables en el sistema. Este patrón usa métricas de estado para detectar errores y volver a enrutar tareas a un agente correcto para mitigar los efectos de un mal funcionamiento.
Convoy secuencial Mantiene la entrada de mensajería simultánea mientras también admite el procesamiento en un orden definido. Este patrón puede eliminar las condiciones de carrera que son difíciles de solucionar, controlar mensajes con contenido u otras soluciones alternativas para abordar mensajes ordenados incorrectamente que pueden provocar errores de funcionamiento.
Sharding Dirige la carga a un destino lógico específico para controlar la solicitud específica, lo que permite la colocación para la optimización. Dado que los datos o el procesamiento están aislados en la partición, un mal funcionamiento de una partición permanece aislado en esa partición.
Fig Strangler Proporciona un enfoque para reemplazar sistemáticamente los componentes de un sistema en ejecución por nuevos componentes, a menudo durante una migración o modernización del sistema. El enfoque incremental de este patrón puede ayudar a mitigar los riesgos durante una transición.
Limitaciones Impone límites en la velocidad o el rendimiento de las solicitudes entrantes a un recurso o componente. Puede diseñar los límites para ayudar a evitar el agotamiento de recursos que podría dar lugar a errores de funcionamiento. También puede usar este patrón como mecanismo de control en un plan de degradación estable.

Pasos siguientes

Revise los patrones de diseño en la nube que admiten los otros pilares de Azure Well-Architected Framework: