Estrategias de arquitectura para supervisar el rendimiento de la carga de trabajo

Se aplica a esta recomendación de la lista de comprobación de eficiencia del rendimiento de Azure Well-Architected Framework:

PE:04 Establezca medidas de rendimiento coherentes para que el comportamiento se pueda analizar a lo largo del tiempo, en comparación con las líneas base, y se use para detectar degradación, ineficiencia y brechas de escalado.

Sin datos de rendimiento, los problemas subyacentes y las oportunidades de optimización pasan desapercibidos, lo que conduce a una experiencia de usuario degradada.

En este artículo se describen las estrategias de diseño para implementar medidas de rendimiento de varias capas que capturan la latencia, el rendimiento y el comportamiento de los recursos para establecer líneas base e identificar la degradación del rendimiento en toda la carga de trabajo.

Las estrategias clave de este artículo se basan en la práctica operativa fundamental de observabilidad, que se describe en Estrategias de arquitectura de OE:07 para diseñar un sistema de supervisión. Las instrucciones sobre la implementación de la práctica de supervisión están disponibles en la Guía de diseño de supervisión. Se recomienda revisar primero esos recursos. Las recomendaciones de esta guía se limitan al rendimiento. Para obtener información sobre la confiabilidad, consulte Estrategias de arquitectura RE:10 para diseñar una estrategia de supervisión y alertas confiable.

Definiciones

Término Definición
Registros de actividad Registros que realizan un seguimiento de las operaciones de administración en los recursos, como la eliminación de un recurso.
Registros de aplicaciones Registros que rastrean información sobre eventos de aplicaciones, errores y otras actividades, como inicios de sesión y fallas de conexión a bases de datos.
Herramienta de supervisión del rendimiento de aplicaciones (APM) Herramienta que supervisa e informa sobre el rendimiento de una aplicación.
Baselines Se esperaban métricas de rendimiento del sistema usadas como punto de referencia para detectar el desfase, las regresiones y las mejoras a lo largo del tiempo.
Instrumentación de código Captura directa o indirecta de métricas de rendimiento desde la perspectiva del código de la aplicación. Las métricas capturadas incluyen métricas de flujo, uso de recursos y métricas específicas del lenguaje o tiempo de ejecución.
Seguimiento distribuido Recopilación y correlación de métricas entre componentes de carga de trabajo distribuidos para comprender los flujos de transacción de un extremo a otro.
Latencia Retraso de tiempo entre iniciar una solicitud y recibir una respuesta, medir la capacidad de respuesta del sistema.
Metrics Medidas numéricas que registran el comportamiento del rendimiento de la carga de trabajo a lo largo del tiempo, normalmente agregadas para el análisis.
Percentiles (p50, p95, p99) Medidas estadísticas que muestran la distribución del rendimiento; p50 representa el rendimiento típico, p95 muestra la mayoría de la experiencia del usuario bajo carga, p99 captura el peor rendimiento de los casos.
Métricas de la plataforma Valores numéricos que registran el rendimiento de la carga de trabajo en un momento determinado.

Uso de métricas basadas en percentil

Mida las métricas de rendimiento, como la latencia, el tiempo de respuesta o los tiempos de carga, con percentiles (p50, p95, p99), no medias. Los promedios pueden ser engañosos. Si la mayoría de las solicitudes son rápidas pero algunas son extremadamente lentas, el promedio ocultará la mala experiencia.

Los percentiles muestran el comportamiento final, que es importante para comprender la experiencia del usuario. p50 representa el rendimiento típico, p95 muestra lo que la mayoría de los usuarios experimentan bajo carga y p99 captura el peor rendimiento o los valores atípicos.

Recopile datos de rendimiento mediante las herramientas de supervisión y represente como percentiles a lo largo de las ventanas de tiempo definidas. Úselos como línea base para la supervisión, las alertas y el análisis de rendimiento.

Definición de los límites de mejora del rendimiento

Defina límites claros de rendimiento para que sepa exactamente lo que se incluye en las medidas. Desglosar la latencia en el sistema en lugar de tratarla como un solo número. Por ejemplo, atribuir tiempo a cada capa donde se encuentran los servicios perimetrales, las puertas de enlace, el cómputo y las dependencias, para ver dónde se producen realmente retrasos.

Separe lo que controla de lo que no: el código, los servicios, la infraestructura y las dependencias directas frente a factores externos, como las condiciones del lado cliente, la resolución DNS, la latencia de ISP o las restricciones de dispositivo. Esta distinción evita la asignación incorrecta y mantiene la optimización centrada en las áreas donde puede realizar cambios, a la vez que refleja la experiencia completa del usuario de un extremo a otro.

Evalúe cuándo y dónde afectan los problemas de rendimiento a la experiencia del usuario. Compense esa degradación a través del diseño o mitigación mediante mejoras en las partes controlables del sistema.

Segmentación de señales por entorno y propósito

Segmente los datos de rendimiento para que cada señal refleje un contexto claro. Separe por entorno y propósito para evitar mezclar señales que se comporten de forma diferente o sirvan decisiones diferentes.

Mantenga separados los datos de producción y no producción. Los datos de producción reflejan el impacto real del usuario y deben impulsar la supervisión y las alertas. Los datos de no producción son útiles para probar y ajustar, pero mezclarlos con datos de producción distorsiona los resultados y oculta problemas reales.

Separe las métricas de rendimiento de las métricas empresariales. Las métricas de rendimiento realizan un seguimiento del comportamiento del sistema y el estado de la carga de trabajo, mientras que las métricas empresariales realizan un seguimiento de los resultados. Incluso cuando se superponen, guárdelos en secuencias distintas para que cada uno pueda analizarse y usarse de forma independiente.

Cree alertas de rendimiento delimitadas y procesables.

El objetivo de las alertas es la detección temprana de la degradación del rendimiento antes de que se convierta en un impacto empresarial o visible para el usuario. Cree alertas en dos niveles: experiencia de usuario de un extremo a otro y transacciones internas principales que representan rutas de acceso críticas del sistema bajo carga.

Usa un único conjunto de datos coherente dentro de cada entorno para los objetivos y las alertas. Si las alertas se basan en datos diferentes de los objetivos de rendimiento, son poco confiables y difíciles de confiar.

Cree alertas que sean accionables y claramente vinculadas a los resultados de rendimiento. Cada alerta debe indicar qué umbral tenía una vulneración sostenida, el posible impacto y los componentes implicados para que quede claro dónde investigar y lo que se ve afectado. Comience con umbrales estándar y conocidos y, a continuación, afinalos con el tiempo en función del comportamiento observado del sistema y las características de la carga de trabajo.

Cuando no es posible realizar alertas directas sobre una dependencia externa, use señales indirectas como la duración de las llamadas de dependencia, las tasas de error o el comportamiento de tiempo de espera para aproximar su impacto en el rendimiento del sistema.

Supervisión de la elasticidad

Mida cómo responde el sistema a los cambios en los eventos de demanda y escalado.

Realice un seguimiento del inicio en frío y la latencia de inicialización para comprender cómo afecta la sobrecarga de inicio a la capacidad de respuesta, especialmente durante los eventos de escalabilidad horizontal. Monitorice el comportamiento de escalado horizontal y escalado vertical para evaluar qué tan rápido el sistema se adapta a los cambios en la carga y si las acciones de escalado están a la par con la demanda.

Seguimiento del rendimiento a lo largo del tiempo

Realice un seguimiento de cómo evoluciona el rendimiento con los cambios en el diseño y los factores externos.

Establezca líneas base que representen el rendimiento esperado del sistema y, a continuación, compare el comportamiento actual con ellos para detectar el desfase, incluidas las regresiones y las mejoras.

Conecte los cambios de rendimiento a eventos operativos, como implementaciones, actualizaciones de configuración y acciones de escalado. Anota las escalas de tiempo con estos eventos, por lo que los cambios en el comportamiento tienen un contexto claro y se pueden realizar un seguimiento de las causas probables.

Use esta visibilidad continua como un bucle de comentarios para las decisiones de ingeniería. Aporte información sobre el rendimiento en la planificación y la priorización, y trátelas como aportes para el trabajo normal en vez de que se utilicen solo para la respuesta a incidentes.

Refina continuamente los objetivos de rendimiento a medida que evoluciona el sistema. Ajuste los SLO, los umbrales y las expectativas en función de los patrones de uso y comportamiento observados para que los objetivos sigan siendo realistas y alineados con la experiencia real del usuario.

Recopilación de datos de rendimiento de aplicaciones

Debe tener métricas de rendimiento de la aplicación, como el rendimiento, la latencia y los tiempos de finalización, que se recopilan principalmente mediante el código de instrumentación.

Instrumente rutas de ejecución críticas en las que el rendimiento sea más visible: flujos de solicitudes clave, operaciones que consumen muchos recursos y puntos en los que se producen dependencias externas o reintentos. Asegúrese de la visibilidad de las transacciones de extremo a extremo para que se pueda medir el tiempo total de ejecución y sus pasos contribuyentes.

Capture tres tipos principales de señales de rendimiento:

  • Métricas para el comportamiento de rendimiento agregado (distribuciones de latencia, rendimiento, tasas de error)
  • Trazas para entender cómo se distribuye el tiempo entre las rutas de solicitud y los componentes del sistema
  • Registros para el contexto de ejecución detallado en pasos o eventos específicos

Use metadatos coherentes en estas señales para que los datos de rendimiento se puedan correlacionar entre capas del sistema y entre servicios.

Evite duplicar las señales de rendimiento de nivel inferior ya expuestas por la plataforma a menos que se requiera granularidad adicional para explicar el comportamiento o cuellos de botella específicos de la carga de trabajo.

Recopilación de datos de rendimiento de recursos

Recopile datos de rendimiento de nivel de recurso para comprender cómo se comportan los componentes de infraestructura bajo carga y cómo contribuyen al rendimiento general de la carga de trabajo.

Cada servicio expone métricas específicas de la plataforma que reflejan sus características de mantenimiento y rendimiento. Utilice la configuración de diagnóstico para exportar estos datos y poder acceder a ellos en alertas, paneles y análisis a largo plazo, más allá de la retención de la plataforma a corto plazo.

Recopile métricas y registros para todos los recursos. Realice un seguimiento del uso de cálculo y almacenamiento con respecto a los intervalos esperados para confirmar que el subaprovisionamiento no está introduciendo latencia ni degradando el rendimiento bajo carga. El sobreaprovisionamiento también se puede detectar con estos datos al examinar el uso de P99 y comparar con el margen disponible en sus recursos.

Supervise el tráfico de red como parte del rendimiento de los recursos. Analice el flujo de tráfico entre subredes y límites de servicio para comprender los patrones de latencia, congestión y transferencia de datos que pueden afectar al rendimiento de la carga de trabajo.

Recopilación de datos de base de datos y almacenamiento

Los sistemas de almacenamiento y base de datos producen señales de rendimiento especializadas para identificar cuellos de botella, validar la capacidad y comprender el comportamiento de la carga de trabajo. Estas señales suelen provenir de herramientas de supervisión integradas y registros generados por el sistema.

Céntrese en las dimensiones clave de rendimiento:

Area Qué medir Lo que te dice
Capacidad de procesamiento Volumen de lectura y escritura a lo largo del tiempo Capacidad de transferencia de datos
Latencia Tiempo por operación de almacenamiento Capacidad de respuesta del almacenamiento
IOPS Operaciones de lectura y escritura por segundo Funcionalidad de control de transacciones
Uso de capacidad Almacenamiento usado versus disponible Necesidades de escalado y planeamiento de capacidad

En el caso de las bases de datos, amplíe la supervisión al comportamiento específico de la carga de trabajo:

Area Qué medir Lo que te dice
Rendimiento de las consultas Tiempo de ejecución, frecuencia, uso de recursos Eficacia de los patrones de acceso a datos
Rendimiento de las transacciones Duración, simultaneidad, contención de bloqueo Contención y eficiencia transaccional
Rendimiento del índice Fragmentación, uso, impacto en la optimización Eficacia de las estructuras de aceleración de consultas
Uso de recursos CPU, memoria, disco, red Restricciones de nivel de sistema
Métricas de conexión Conexiones activas, con errores y anuladas Estabilidad y presión de conexión
Tasa de transacciones Transacciones por segundo Intensidad de la carga de trabajo y cambios a lo largo del tiempo
Tasas de error Errores y errores de base de datos Señales de degradación del rendimiento y confiabilidad

Use estas señales juntas para distinguir entre consultas lentas, saturación de recursos e ineficacias estructurales. Esto permite la optimización dirigida tanto en sistemas de almacenamiento como en cargas de trabajo de base de datos.

Recopilación de datos de rendimiento del sistema operativo

En el caso de las cargas de trabajo basadas en la infraestructura, recopile métricas de nivel de sistema operativo para comprender cómo se usan los recursos de proceso y dónde pueden producirse restricciones de recursos.

Realice muestreos de los contadores de rendimiento del sistema operativo a intervalos regulares, para capturar el comportamiento en función del tiempo del sistema bajo carga.

Area Qué medir Lo que indica
Unidad Central de Procesamiento (CPU) Uso de CPU (usuario/privilegios), longitud de la cola de CPU Saturación de proceso y presión de programación
Processes Recuento de subprocesos, recuento de manejadores Carga de procesos de nivel de sistema operativo y aplicación
Memoria Memoria comprometida, memoria disponible, tasa de paginación, uso de memoria virtual Actividad de paginación y presión de memoria
Disco Velocidad de lectura y escritura, rendimiento, uso de disco Rendimiento de E/S de almacenamiento y cuellos de botella
Red Rendimiento de la interfaz, errores RX/TX Problemas de transmisión y capacidad de red

Use estas señales para identificar la saturación de los recursos en el nivel de sistema operativo y distinguir entre las ineficiencias de nivel de aplicación y las restricciones de infraestructura.

Generar datos sintéticos, cuando sea necesario

Si el sistema no se usa de forma coherente, es difícil saber si funcionará bien cuando vuelva el tráfico.

Para solucionar esto, use transacciones sintéticas, que envía solicitudes automatizadas a través del sistema. Estos simulan el uso real sin afectar a los usuarios o datos reales. Esto ayuda a mantener activas partes del sistema, generar métricas de rendimiento coherentes y revelar patrones (como problemas de hora de día) que el uso irregular podría ocultar.

Facilitación con Azure

Azure Monitor proporciona una plataforma unificada para recopilar, analizar y responder a los datos de rendimiento en toda la carga de trabajo. Agrega datos de aplicaciones, infraestructura y orígenes externos a una plataforma de datos común.

Recopilación y almacenamiento de datos: use áreas de trabajo de Log Analytics para centralizar los datos de rendimiento con directivas de retención configurables. Cree varias áreas de trabajo para segmentar los datos por entorno o requisitos de cumplimiento.

Supervisión de aplicaciones: Application Insights recopila telemetría de nivel de aplicación, incluidas las tasas de solicitud, los tiempos de respuesta y las excepciones. Habilite el seguimiento distribuido para correlacionar el rendimiento entre los componentes distribuidos.

Supervisión de la infraestructura: habilite la configuración de diagnóstico en todos los servicios de Azure para recopilar métricas y registros de plataforma. Use la extensión Azure Diagnostics para obtener datos detallados de rendimiento de máquinas virtuales. Explore las opciones de telemetría de su plataforma específica. Por ejemplo, los clústeres de Kubernetes emiten telemetría de rendimiento enriquecida a través de integraciones de Prometheus .

Base de datos y almacenamiento: Azure Monitor proporciona supervisión integrada para los servicios de azure SQL Database, MySQL, PostgreSQL y storage. Azure Storage Analytics realiza un seguimiento de los indicadores clave de rendimiento, como el rendimiento y la latencia en Blob, Table y Queue Storage.

Alertas y análisis: cree reglas de alerta con umbrales personalizables, ventanas de tiempo y acciones (correo electrónico, webhooks, Azure Functions). Use los registros de Azure Monitor para realizar consultas cruzadas y correlacionar los datos de rendimiento. Para más información sobre los precios, consulte Precios de Azure Monitor.

Ejemplos

Lista de comprobación de eficiencia en el rendimiento

Consulte el conjunto completo de recomendaciones.