Tutorial: Ejecución de una prueba de carga para identificar cuellos de botella de rendimiento en una aplicación web
Artículo
En este tutorial, aprenderá a identificar cuellos de botella de rendimiento en una aplicación web mediante Azure Load Testing. Puede simular la carga de una aplicación web Node.js de ejemplo y, a continuación, usar el panel de prueba de carga para analizar las métricas del lado cliente y del lado servidor.
La aplicación de ejemplo consta de una API web Node.js, que interactúa con una base de datos NoSQL. Implemente la API web en App de Azure aplicaciones web de Service y use Azure Cosmos DB como base de datos.
En este tutorial, aprenderá a:
Implementar la aplicación de ejemplo.
Crear y ejecutar una prueba de carga.
Agregue componentes de aplicación de Azure a la prueba de carga.
Identifique los cuellos de botella de rendimiento mediante el panel de pruebas de carga.
Requisitos previos
Una cuenta de Azure con una suscripción activa. Si no tiene una suscripción a Azure, cree una cuenta gratuita antes de empezar.
CLI de Azure, versión 2.2.0 o posterior. Ejecute az --version para buscar la versión instalada en el equipo. Si tiene que instalar o actualizar la CLI de Azure, consulte Instalación de la CLI de Azure.
Inicie sesión en Azure Portal y compruebe que la suscripción está activa.
Compruebe la versión de la CLI de Azure en una ventana de terminal o de comandos, para lo que debe ejecutar az --version. Para saber cuál es la versión más reciente, consulte las notas de la versión más reciente.
En este tutorial, va a generar la carga en una aplicación web de ejemplo que se implementa en App de Azure Service. Use comandos de la CLI de Azure, comandos de Git y comandos de PowerShell para implementar la aplicación de ejemplo en la suscripción de Azure.
Abra Windows PowerShell, inicie sesión en Azure y establezca la suscripción:
Azure CLI
az loginaz account set --subscription<your-Azure-Subscription-ID>
Clone el repositorio de origen de la aplicación de ejemplo:
La aplicación de ejemplo es una aplicación de Node.js que consta de un componente web de Azure App Service y una base de datos de Azure Cosmos DB. El repositorio incluye un script de PowerShell que implementa la aplicación de ejemplo en su suscripción de Azure. También tiene un script de Apache JMeter que usará en pasos posteriores.
Vaya al directorio de la aplicación de Node.js e implemente la aplicación de ejemplo mediante este script de PowerShell:
PowerShell
cd nodejs-appsvc-cosmosdb-bottleneck
.\deploymentscript.ps1
Después de instalarlo, puede ejecutar el comando anterior como pwsh ./deploymentscript.ps1.
En el símbolo del sistema, proporcione lo siguiente:
Su identificador de suscripción de Azure.
Escriba un nombre único para la aplicación web.
Una ubicación. De forma predeterminada, la ubicación es eastus. Para obtener los códigos de las regiones, ejecute el comando Get-AzLocation.
Importante
Para el nombre de la aplicación web, use solo letras minúsculas y números. No use espacios ni caracteres especiales.
Una vez que finalice la implementación, vaya a la aplicación de ejemplo en ejecución abriendo https://<yourappname>.azurewebsites.net en una ventana del explorador.
Ahora que tiene implementada y en ejecución la aplicación de ejemplo, puede crear un recurso de prueba de carga de Azure y una prueba de carga.
Crear una prueba de carga
En este tutorial, va a crear una prueba de carga con la CLI de Azure mediante la carga de un script de prueba de JMeter (jmx archivo). El repositorio de aplicaciones de ejemplo ya contiene un archivo de configuración de prueba de carga y un script de prueba de JMeter.
Siga estos pasos para crear un recurso de prueba de carga de Azure y una prueba de carga mediante la CLI de Azure:
Abra una ventana de terminal y escriba el siguiente comando para iniciar sesión en la suscripción de Azure.
Azure CLI
az login
Vaya al directorio de la aplicación de ejemplo.
Azure CLI
cd nodejs-appsvc-cosmosdb-bottleneck
Cree un grupo de recursos para el recurso de prueba de carga de Azure.
Opcionalmente, también puede reutilizar el grupo de recursos de la aplicación de ejemplo que implementó anteriormente.
Reemplace el <load-testing-resource-group-name> marcador de posición de texto por el nombre del grupo de recursos.
Azure CLI
resourceGroup="<load-testing-resource-group-name>"location="East US"az group create --name$resourceGroup--location$location
Cree un recurso de prueba de carga de Azure con el az load create comando .
Reemplace el <load-testing-resource-name> marcador de posición de texto por el nombre del recurso de prueba de carga.
Azure CLI
# This script requires the following Azure CLI extensions:# - load
loadTestResource="<load-testing-resource-name>"az load create --name$loadTestResource--resource-group$resourceGroup--location$location
Cree una prueba de carga para simular la carga en la aplicación de ejemplo con el az load test create comando .
Reemplace el <web-app-hostname> marcador de posición de texto por el nombre de host de App Service de la aplicación de ejemplo. Este valor tiene el formato myapp.azurewebsites.net. No incluya la https:// parte de la dirección URL.
Azure CLI
testId="sample-app-test"webappHostname="<web-app-hostname>"az load test create --test-id$testId--load-test-resource$loadTestResource--resource-group$resourceGroup--load-test-config-file SampleApp.yaml --envwebapp=$webappHostname
Este comando usa el Sampleapp.yaml archivo de configuración de pruebas de carga, que hace referencia al SampleApp.jmx script de prueba de JMeter. Use un parámetro de línea de comandos para pasar el nombre de host de la aplicación de ejemplo a la prueba de carga.
Ahora tiene un recurso de prueba de carga de Azure y una prueba de carga para generar la carga en la aplicación web de ejemplo de la suscripción de Azure.
Adición de componentes de aplicación de Azure para supervisar la aplicación
Azure Load Testing permite supervisar las métricas de recursos de los componentes de Azure de la aplicación. Al analizar estas métricas del lado servidor, puede identificar problemas de rendimiento y estabilidad en la aplicación directamente desde el panel de Azure Load Testing.
En este tutorial, agregará los componentes de Azure para la aplicación de ejemplo que implementó en Azure, como app service, la cuenta de Cosmos DB, etc.
Para agregar los componentes de la aplicación de Azure para la aplicación de ejemplo a la prueba de carga:
En Azure Portal, vaya al recurso de prueba de carga de Azure.
En el panel izquierdo, seleccione Pruebas para ver la lista de pruebas de carga.
Active la casilla situada junto a la prueba de carga y, a continuación, seleccione Editar.
Vaya a la pestaña Supervisión y seleccione Agregar o modificar.
Active las casillas de la aplicación de ejemplo que implementó anteriormente y, a continuación, seleccione Aplicar.
Sugerencia
Puede usar el filtro del grupo de recursos para ver solo los recursos de Azure en el grupo de recursos de aplicación de ejemplo.
Seleccione Aplicar para guardar los cambios en la configuración de prueba de carga.
Ha agregado correctamente los componentes de aplicación de Azure para la aplicación de ejemplo a la prueba de carga para habilitar la supervisión de métricas del lado servidor mientras se ejecuta la prueba de carga.
Ejecutar la prueba de carga
Ahora puede ejecutar la prueba de carga para simular la carga en la aplicación de ejemplo que implementó en la suscripción de Azure. En este tutorial, ejecutará la prueba de carga desde Azure Portal. Como alternativa, puede configurar el flujo de trabajo de CI/CD para ejecutar la prueba de carga.
Para ejecutar la prueba de carga en Azure Portal:
En Azure Portal, vaya al recurso de prueba de carga de Azure.
En el panel izquierdo, seleccione Pruebas para ver la lista de pruebas de carga.
Seleccione la prueba de carga de la lista para ver los detalles de la prueba y la lista de ejecuciones de pruebas.
Seleccione Ejecutar y, a continuación , Vuelva a ejecutar para iniciar la prueba de carga.
Opcionalmente, puede escribir una descripción de ejecución de prueba.
Al ejecutar una prueba de carga, Azure Load Testing implementa el script de prueba de JMeter y los archivos adicionales en las instancias del motor de prueba y, a continuación, inicia la prueba de carga.
Cuando se inicie la prueba de carga, debería ver el panel de pruebas de carga.
Si el panel no se muestra, puede seleccionar Actualizar en y, a continuación, seleccionar la ejecución de prueba en la lista.
El panel de pruebas de carga presenta los detalles de ejecución de pruebas, como las métricas del lado cliente y las métricas de la aplicación del lado servidor. Los gráficos del panel se actualizan automáticamente.
Puede aplicar varios filtros o agregar los resultados a distintos percentiles para personalizar los gráficos.
Sugerencia
Puede detener una prueba de carga en cualquier momento desde Azure Portal; para ello, seleccione Detener.
Espere hasta que la prueba de carga finalice por completo antes de continuar con la sección siguiente.
Uso de métricas del lado servidor para identificar cuellos de botella de rendimiento
En esta sección, analizará los resultados de la prueba de carga para identificar cuellos de botella de rendimiento en la aplicación. Examine las métricas del lado cliente y del lado servidor para determinar la causa principal del problema.
En primer lugar, mire las métricas del lado cliente. Observe que el percentil 90 de la métrica Tiempo de respuesta para las add solicitudes de API y get es mayor que para la lasttimestamp API.
Puede ver un patrón similar para Errores, donde la API lasttimestamp tiene menos errores que las otras API.
Los resultados de las API add y get son similares, mientras que la API lasttimestamp se comporta de forma diferente. La causa podría estar relacionada con la base de datos, ya que las API add y get implican el acceso a la base de datos.
Para investigar este cuello de botella con más detalle, desplácese hacia abajo hasta el panel Métricas del lado servidor.
Las métricas del lado servidor muestran información detallada sobre los componentes de la aplicación de Azure: plan de Azure App Service, aplicación web de Azure App Service y Azure Cosmos DB.
En las métricas del plan de Azure App Service, puede ver que las métricas Porcentaje de CPU y Porcentaje de memoria están dentro de un intervalo aceptable.
Ahora, mire las métricas del lado servidor de Azure Cosmos DB.
Observe que la métrica Consumo de RU normalizado muestra que la base de datos se estaba ejecutando rápidamente con un uso de recursos del 100 %. El uso elevado de recursos puede provocar errores de limitación de la base de datos. También puede aumentar los tiempos de respuesta de las add API web y get .
También puede ver que la métrica Rendimiento aprovisionado para la instancia de Azure Cosmos DB tiene un rendimiento máximo de 400 RU. Aumentar el rendimiento aprovisionado de la base de datos podría resolver el problema de rendimiento.
Aumento del rendimiento de la base de datos
En esta sección, asignará más recursos a la base de datos para resolver el cuello de botella de rendimiento.
Para Azure Cosmos DB, aumente la configuración de escala de RU de la base de datos:
Vaya al recurso de Azure Cosmos DB que aprovisionó como parte de la implementación de la aplicación de ejemplo.
Seleccione la pestaña Data Explorer.
Seleccione Escalar y Configuración y actualice el valor de rendimiento a 1200.
Seleccione Guardar para confirmar los cambios.
Validación de las mejoras de rendimiento
Ahora que ha aumentado el rendimiento de la base de datos, vuelva a ejecutar la prueba de carga y compruebe que los resultados de rendimiento han mejorado:
En el panel de serie de pruebas, seleccione Volver a ejecutar y, a continuación, seleccione Volver a ejecutar en el panel Volver a ejecutar las pruebas.
Puede ver una nueva entrada de ejecución de prueba con una columna de estado que recorre los estados Aprovisionamiento, Ejecución y Listo . En cualquier momento, seleccione la ejecución de la prueba para supervisar cómo progresa la prueba de carga.
Una vez finalizada la prueba de carga, compruebe los resultados de Tiempo de respuesta y de Errores de las métricas del lado cliente.
Compruebe las métricas del lado servidor de Azure Cosmos DB y asegúrese de que el rendimiento ha mejorado.
El valor de Consumo de RU normalizado de Azure Cosmos DB ahora está muy por debajo del 100 %.
Ahora que ha actualizado la configuración de escalado de la base de datos, puede ver lo siguiente:
Se ha mejorado el tiempo de respuesta de las add API y get .
El consumo de RU normalizado permanece muy por debajo del límite.
Como resultado, se ha mejorado el rendimiento general de la aplicación.
Limpieza de recursos
Importante
Puede reutilizar el recurso de Azure Load Testing que creó para otros artículos de procedimientos y tutoriales de Azure Load Testing.
Si no planea usar ninguno de los recursos que ha creado, elimínelos para no incurrir en cargos. Si ha implementado la aplicación de ejemplo en otro grupo de recursos, puede repetir los siguientes pasos.
Para eliminar recursos desde Azure Portal:
Seleccione el botón del menú de la esquina superior izquierda y, después, seleccione Grupos de recursos.
En la lista, seleccione el grupo de recursos que creó.
Seleccione Eliminar grupo de recursos.
Escriba el nombre del grupo de recursos. A continuación, seleccione Eliminar.
Para eliminar recursos mediante la CLI de Azure, escriba el siguiente comando:
Azure CLI
az group delete --name<yourresourcegroup>
Recuerde que al eliminar el grupo de recursos se eliminan todos los recursos que contiene.
Aprenda a optimizar el rendimiento de las aplicaciones mediante la simulación de cargas reales con el servicio Azure Load Testing. Obtenga información sobre cómo automatizar las pruebas de carga con Acciones de GitHub para garantizar un rendimiento y escalabilidad coherentes de las aplicaciones.
Aprenda a generar cargas a gran escala, identificar cuellos de botella de rendimiento de aplicaciones y automatizar las pruebas de regresión con el servicio Azure Load Testing. Tutoriales, ejemplos de código, Acciones de GitHub, Azure Pipelines, etc.
Aprenda a capturar y supervisar las métricas de aplicaciones del lado servidor al ejecutar una prueba de carga con Azure Load Testing. Agregue componentes de aplicación de Azure y métricas de recursos a la configuración de la prueba de carga.
Obtenga información sobre cómo configurar instancias del motor de pruebas en Azure Load Testing para ejecutar pruebas de carga a gran escala. Supervise las métricas de mantenimiento del motor para encontrar una configuración óptima para la prueba de carga.
Aprenda a usar Azure Load Testing con aplicaciones hospedadas en Azure App Service. Ejecute pruebas de carga, use variables de entorno y obtenga información con métricas y diagnósticos del servidor.
Aprenda a agregar solicitudes a una prueba basada en direcciones URL en Azure Load Testing mediante campos de interfaz de usuario o comandos cURL. Use variables para pasar parámetros a las solicitudes.