Compartir a través de


Patrones de diseño de arquitectura que admiten la eficiencia del rendimiento

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 confiabilidad, la seguridad, el costo y las operaciones. Si no se mitiga, los riesgos provocarán eventualmente ineficacias 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.

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

Modelo Resumen
Solicitud-respuesta asincrónica 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 va a completar a medida que se permita la capacidad.
Back-end para front-end 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. 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.
Mamparo Presenta la segmentación entre componentes para aislar el radio de explosión de mal funcionamiento. Este diseño permite que cada mamparo sea escalable individualmente para satisfacer las necesidades de la tarea que está 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 de lectura intensiva 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.
Coreografía 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.
Disyuntor Impide que las solicitudes continuas funcionen mal o no estén disponibles. 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 intenta recuperarse.
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 eficacia 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.
Consumidores competidores Aplica el procesamiento distribuido y simultáneo para controlar eficazmente los elementos de una cola. Este modelo admite la distribución de la carga entre todos los nodos de consumidor y el escalado dinámico que se basa en la profundidad de la cola.
Consolidación de recursos de proceso 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 exceso de aprovisionamiento. 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 comandos y consultas (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 más útil en las aplicaciones que tienen una relación de lectura y escritura alta.
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 se implementarán simultáneamente las mismas versiones o diferentes. 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.
Origen de eventos 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, puede mejorar el rendimiento. Las mejoras en el rendimiento se deben a las operaciones atómicas de solo anexión y a la prevención del bloqueo de la base de datos para escrituras y lecturas.
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. Al descargar la administración de usuarios y la autenticación, puede dedicar recursos de aplicación a otras prioridades.
Portero 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.
Agregación de puerta de enlace Simplifica las interacciones de cliente con la carga de trabajo agregando llamadas a varios servicios back-end en una sola solicitud. Este diseño puede incurrir en menos latencia que un diseño en el que el cliente establece varias conexiones. El almacenamiento en caché también es común en las implementaciones de agregación porque minimiza las llamadas a los sistemas back-end.
Descarga de puerta de enlace 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.
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 distribuir el tráfico entre los nodos del sistema para equilibrar la carga.
Geoda 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 usarlo para atender la aplicación desde una región más cercana a la base de usuarios distribuida. Al hacerlo, se reduce la latencia eliminando el tráfico de larga distancia y porque comparte la infraestructura solo entre los usuarios que actualmente usan la misma geode.
Supervisión de puntos de conexión de mantenimiento 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 estos puntos de conexión para mejorar el equilibrio de carga mediante el enrutamiento del tráfico a solo los nodos que se comprueban como correctos. Con una configuración adicional, también puede obtener métricas en la capacidad de nodo disponible.
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. Los clientes apuntan a su partición, partición o punto de conexión, que puede habilitar la creación de particiones de datos dinámicas para la optimización del rendimiento.
Vista materializada Usa vistas precaladas de datos para optimizar la recuperación de datos. Las vistas materializadas almacenan los resultados de cálculos complejos o consultas sin necesidad de que el motor de base de datos o el cliente vuelvan a calcular para cada solicitud. Este diseño reduce el consumo general de recursos.
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 rendimiento en el trabajo más sensible al tiempo.
Publicador o 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 desacoplamiento de publicadores de consumidores le 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 nivelación de carga Controla el nivel de las solicitudes o tareas entrantes almacenando en búfer en una cola y permitiendo que el procesador de colas los controle a un ritmo controlado. Este enfoque permite el diseño intencional en el rendimiento, ya que la ingesta de solicitudes no necesita correlacionarse con la velocidad en la que se procesan.
Supervisor del agente del programador 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 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 inferior.
Particionamiento 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.
Hospedaje de contenido estático Optimiza la entrega de contenido estático a los clientes de carga de trabajo mediante una plataforma de hospedaje diseñada para ese propósito. La descarga de la responsabilidad en un host externo ayuda a mitigar la congestión y le permite usar la plataforma de aplicaciones solo para ofrecer lógica de negocios.
Limitación 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 escenarios ruidosos vecinos de forma proactiva.
Clave de valet 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 una manera 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 de arquitectura que admiten los otros pilares de Azure Well-Architected Framework: