Patrones de diseño de arquitectura que admiten la confiabilidad

Al diseñar arquitecturas de carga 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 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 apoyan directamente uno o varios principios de arquitectura. Los patrones de diseño que admiten el pilar de fiabilidad priorizan la disponibilidad de la carga de trabajo, la autoconservación, la recuperación, la integridad de los datos y del procesamiento, y la contención de fallos.

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

Modelo Resumen
Embajador 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 reintentos o almacenamiento en búfer.
Backends para Frontends Individualiza el nivel 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.
Mamparo Presenta la segmentación intencionada y completa entre componentes para aislar el radio de impacto de un mal funcionamiento. Esta estrategia de aislamiento de fallas intenta contener las fallas solo en el mamparo que está experimentando el problema, evitando 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.
Disyuntor Impide que se realicen solicitudes continuas a una dependencia que esté funcionando mal o no disponible. Al hacerlo, este patrón evita la sobrecarga de una dependencia con errores. También puede usar este patrón para desencadenar una degradación elegante en la carga de trabajo. Los disyuntores a menudo se acoplan con recuperación automática para proporcionar autoconservación y autorreparación.
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 colas de mensajes después de un desastre.
Transacción de compensación Proporciona un mecanismo para recuperarse de errores al revertir los efectos de las acciones aplicadas anteriormente. Este patrón aborda el mal funcionamiento de 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 transacciones o incluso ejecutar el comportamiento del sistema nativo para revertir el efecto.
Consumidores competidores 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.
Configuración de Edge para la carga de trabajo Administra la configuración de las cargas de trabajo perimetrales distribuidas tratando la nube como el origen de verdad deseado, a la vez que garantiza que la configuración permanece disponible localmente durante las interrupciones de conectividad. Este patrón mejora la confiabilidad al admitir la conciliación de la configuración, la detección de desfase y la reversión para recuperarse de actualizaciones parciales o configuraciones no válidas.
Origen de eventos Trata el cambio de estado como una serie de eventos, capturándolos en un registro inmutable y de solo adició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.
Identidad federada 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 desplaza 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.
Agregación de puerta de enlace Simplifica las interacciones del cliente con la carga de trabajo agregando llamadas a varios servicios backend 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.
Descentralización de funciones de la puerta de enlace Descarga el procesamiento de las solicitudes en un dispositivo de gateway antes y después de reenviar la solicitud a un servidor 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.
Enrutamiento de puerta de enlace Enruta las solicitudes de red entrantes a varios sistemas back-end en función de intenciones de solicitud, lógica de negocios y disponibilidad de back-end. El enrutamiento de puerta de enlace le permite enrutar el tráfico solo a nodos correctos en el sistema.
Geoda Implementa sistemas que funcionan en modos de disponibilidad activo-activo en varias zonas geográficas. Este patrón utiliza la replicación de datos para respaldar el principio de que cualquier cliente pueda conectarse a cualquier instancia geográfica. Puede ayudar a que la carga de trabajo soporte una o varias interrupciones regionales.
Supervisión de extremos de salud Proporciona una manera de monitorizar 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 el monitoreo de alertas y la gestión de paneles de control. También puede usarlo como señal para la corrección automática.
Tabla de índice 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 se dirigen a su fragmento, partición o punto de conexión a través de un proceso de búsqueda, puede utilizar este patrón para facilitar un enfoque de conmutación por error para el acceso a datos.
Elección del líder 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 del mal 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.
Canalizaciones y filtros Divide el procesamiento de datos complejos en una serie de fases independientes para lograr un resultado específico. La responsabilidad única de cada fase permite una atención focalizada y evita la distracción del procesamiento de datos fusionados.
Cola de prioridad Garantiza que los elementos de mayor prioridad se procesan y completan antes de los elementos de prioridad inferior. La separación de elementos en función de la prioridad empresarial le permite centrar los esfuerzos de confiabilidad en el trabajo más crítico.
Publisher/Subscriber Desacopla los componentes de una arquitectura reemplazando la comunicación directa de cliente a servicio o cliente a servicios por comunicación a través de un intermediario de mensajes o mediante un bus de eventos.
Nivelación de carga basada en cola Controla el nivel de las solicitudes o tareas entrantes bufferizándolas en una cola y permitiendo que el procesador de colas las gestione de manera controlada. 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 fallos de funcionamiento en el procesamiento de colas para que no afecten a la entrada.
Limitación de velocidad Controla la tasa de solicitudes del cliente para reducir los errores de limitación y evitar escenarios de reintento sin límites. 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.
Reintentar 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 de Saga Coordina las 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 compensatorias 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.
Supervisor del Agente de Planificación Distribuye y redistribuye eficazmente las tareas en un sistema en función de los factores observables en el sistema. Este patrón utiliza métricas de salud para detectar fallos y redirigir tareas a un agente saludable con el fin de mitigar los efectos de un mal funcionamiento.
Convoy secuencial Mantiene la entrada simultánea de mensajería al tiempo que admite el procesamiento en un orden definido. Este patrón puede eliminar las condiciones de carrera difíciles de solucionar, el manejo contencioso de mensajes u otras soluciones para resolver mensajes mal ordenados que pueden provocar errores de funcionamiento.
Particionamiento Dirige la carga a un destino lógico específico para abordar la solicitud específica, permitiendo la co-ubicación para optimizar. 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.
Strangler Fig 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.
Limitación 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ían provocar errores de funcionamiento. También puede usar este patrón como un mecanismo de control en un plan de degradación gradual.

Pasos siguientes

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