Patrones de diseño en la nube que admiten la eficiencia del rendimiento

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 confiabilidad, la seguridad, el costo y las operaciones. Si no se mitiga, los riesgos provocarán eventualmente ineficiencias de rendimiento. 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. Los patrones de diseño que admiten el pilar Eficiencia del rendimiento abordan la escalabilidad, el ajuste del rendimiento, la priorización de tareas y la eliminación de cuellos de botella.

Modelos de diseño para mejorar la eficacia del rendimiento

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

Patrón Resumen
Solicitud y respuesta asincrónicas Mejora la capacidad de respuesta y la escalabilidad de los sistemas al desacoplar las fases de solicitud y respuesta de las interacciones para los procesos que no necesitan respuestas inmediatas. Mediante el uso de un patrón asincrónico, puede maximizar la simultaneidad en el lado servidor. Puede usar este patrón para programar el trabajo que se completará a medida que permita la capacidad.
Backends for Frontends Individualiza el nivel de servicio de una carga de trabajo mediante la creación de servicios independientes que son exclusivos de una interfaz de front-end específica. Esta separación le permite optimizar de maneras que podrían no ser posibles con un nivel de servicio compartido. Al controlar clientes individuales de forma diferente, puede optimizar el rendimiento de las restricciones y funcionalidades de un cliente específico.
Bulkhead Presenta la segmentación entre componentes para aislar el radio de explosión de mal funcionamiento. Este diseño permite que cada mamparo se pueda escalar individualmente para satisfacer las necesidades de la tarea encapsulada en el bulkhead.
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. Este patrón es especialmente útil con datos con mucha lectura que no cambian a menudo y pueden tolerar una cierta cantidad de obsolescencia. El objetivo de esta implementación es proporcionar un mejor rendimiento en el sistema en general descargando este tipo de datos en una memoria caché en lugar de obtenerlo desde su almacén de datos.
Organización Coordina el comportamiento de los componentes distribuidos autónomos en una carga de trabajo mediante la comunicación descentralizada controlada por eventos. Este patrón puede proporcionar una alternativa cuando se producen cuellos de botella de rendimiento en una topología de orquestación centralizada.
Circuit Breaker Evita las solicitudes continuas a una dependencia que no funciona correctamente o no está disponible. Un enfoque de reintento en error puede provocar un uso excesivo de los recursos durante la recuperación de dependencias y también puede sobrecargar el rendimiento en una dependencia que está intentando la recuperació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. Este patrón mejora la eficiencia y el rendimiento de los publicadores de mensajes, los suscriptores y el propio bus de mensajes cuando el sistema controla cargas de datos grandes. Funciona reduciendo el tamaño de los mensajes y asegurándose de que los consumidores recuperen los datos de carga solo si es necesario y en un momento oportuno.
Competing Consumers Aplica el procesamiento distribuido y simultáneo para controlar eficazmente los elementos de una cola. Este modelo admite la distribución de la carga en todos los nodos de consumidor y el escalado dinámico que se basa en la profundidad de la cola.
Compute Resource Consolidation Optimiza y consolida los recursos de proceso aumentando la densidad. Este patrón combina varias aplicaciones o componentes de una carga de trabajo en una infraestructura compartida. Esta consolidación maximiza el uso de recursos informáticos mediante el uso de la capacidad de nodo de reserva para reducir el sobreaprovisionamiento. Los orquestadores de contenedores son un ejemplo común. Las instancias de proceso grandes (a escala vertical) se usan a menudo en el grupo de recursos para estas infraestructuras.
Segregación de responsabilidades de consultas y comandos (CQRS) Separa las operaciones de lectura y escritura del modelo de datos de una aplicación. Esta separación permite optimizar el rendimiento y el escalado específicos de cada operación. Este diseño es muy útil en las aplicaciones que tienen una relación alta de lectura a escritura.
Sellos de implementación Proporciona un enfoque para publicar una versión específica de una aplicación y su infraestructura como una unidad controlada de implementación, en función de la suposición de que las mismas o diferentes versiones se implementarán simultáneamente. Este patrón suele alinearse con las unidades de escalado definidas de la carga de trabajo: dado que se necesita capacidad adicional más allá de lo que proporciona una sola unidad de escalado, se implementa una marca de implementación adicional para el escalado horizontal.
Event Sourcing Trata el cambio de estado como serie de eventos, capturándolos en un registro inmutable y de solo anexión. En función de la carga de trabajo, este patrón, normalmente combinado con CQRS, un diseño de dominio adecuado y la creación de instantáneas estratégicas, pueden mejorar el rendimiento. Las mejoras de rendimiento se deben a las operaciones atómicas de solo anexión y a la prevención del bloqueo de base de datos para escrituras y lecturas.
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. Al descargar la administración de usuarios y la autenticación, puede dedicar recursos de aplicación a otras prioridades.
Gatekeeper Descarga el procesamiento de solicitudes específicamente para el cumplimiento del control de acceso y seguridad antes y después de reenviar la solicitud a un nodo back-end. Este patrón se usa a menudo para implementar la limitación en un nivel de puerta de enlace en lugar de implementar comprobaciones de velocidad en el nivel de nodo. La coordinación del estado de velocidad entre todos los nodos no es intrínsecamente eficaz.
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. Este diseño puede incurrir en una latencia menor que un diseño en el que el cliente establece varias conexiones. El almacenamiento en caché también es habitual en las implementaciones de agregación porque minimiza las llamadas a los sistemas back-end.
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. Agregar una puerta de enlace de descarga al proceso de solicitud le permite usar menos recursos por nodo porque la funcionalidad está centralizada en la puerta de enlace. Puede optimizar la implementación de la funcionalidad descargada independientemente del código de la aplicación. Es probable que la funcionalidad proporcionada por la plataforma descargada ya sea muy eficaz.
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 del back-end. El enrutamiento de puerta de enlace le permite distribuir el tráfico entre los nodos del sistema para equilibrar la carga.
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 que cualquier cliente pueda conectarse a cualquier instancia geográfica. Puede usarlo para atender la aplicación desde una región más cercana a la base de usuarios distribuida. Esto reduce la latencia eliminando el tráfico de larga distancia y porque comparte la infraestructura solo entre los usuarios que usan actualmente la misma geode.
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 fin. Puede usar estos puntos de conexión para mejorar el equilibrio de carga mediante el enrutamiento del tráfico solo a los nodos que se comprueban como correctos. Con una configuración adicional, también puede obtener métricas en la capacidad de nodo disponible.
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, lo que evita la necesidad de realizar exámenes completos del almacén de datos. Los clientes apuntan a su partición, partición o punto de conexión, que puede habilitar la creación de particiones dinámicas de datos para la optimización del rendimiento.
Materialized View Usa vistas precaladas de datos para optimizar la recuperación de datos. Las vistas materializadas almacenan los resultados de cálculos o consultas complejos sin requerir que el motor de base de datos o el cliente se vuelvan a calcular para cada solicitud. Este diseño reduce el consumo general de recursos.
Priority Queue Garantiza que los elementos de prioridad más alta se procesan y completan antes de los elementos de prioridad inferior. La separación de elementos en función de la prioridad empresarial permite centrar los esfuerzos de rendimiento en el trabajo más sensible al tiempo.
Publicador y suscriptor 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 agente de mensajes intermedio o un bus de eventos. La desacoplación de publicadores de consumidores permite optimizar el proceso y el código específicamente para la tarea que el consumidor necesita realizar para el mensaje específico.
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 permite el diseño intencionado en el rendimiento, ya que la ingesta de solicitudes no necesita correlacionarse con la velocidad en la que se procesan.
Scheduler Agent Supervisor Distribuye y redistribuye eficazmente las tareas en un sistema en función de los factores que son observables en el sistema. Este patrón usa métricas de rendimiento y capacidad para detectar el uso actual y enrutar las tareas a un agente que tiene capacidad. También puede usarlo para priorizar la ejecución del trabajo de mayor prioridad sobre el trabajo de prioridad más baja.
Sharding Dirige la carga a un destino lógico específico para controlar una solicitud específica, lo que permite la colocación para la optimización. Al usar particionamiento en la estrategia de escalado, los datos o el procesamiento se aíslan en una partición, por lo que compite por los recursos solo con otras solicitudes dirigidas a esa partición. También puede usar particionamiento para optimizar en función de la geografía.
Sidecar Amplía la funcionalidad de una aplicación mediante la encapsulación de tareas no principales o transversales en un proceso complementario que existe junto con la aplicación principal. Puede mover tareas transversales a un único proceso que se puede escalar entre varias instancias del proceso principal, lo que reduce la necesidad de implementar la funcionalidad duplicada para cada instancia de la aplicación.
Static Content Hosting Optimiza la entrega de contenido estático a los clientes de carga de trabajo mediante una plataforma de hospedaje diseñada para ese fin. La descarga de la responsabilidad en un host externo ayuda a mitigar la congestión y permite usar la plataforma de aplicaciones solo para ofrecer lógica de negocios.
Limitaciones Impone límites en la velocidad o el rendimiento de las solicitudes entrantes a un recurso o componente. Cuando el sistema está bajo demanda alta, este patrón ayuda a mitigar la congestión que puede provocar cuellos de botella de rendimiento. También puede usarlo para evitar de forma proactiva escenarios ruidosos de vecinos.
Valet Key Concede acceso restringido a la seguridad a un recurso sin usar un recurso intermediario para proxy el acceso. Al hacerlo, se descarga el procesamiento como una relación exclusiva entre el cliente y el recurso sin necesidad de un componente de embajador que necesite controlar todas las solicitudes de cliente de forma eficaz. La ventaja de usar este patrón es más importante cuando el proxy no agrega valor a la transacción.

Pasos siguientes

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