Tutorial: Ejecución de una prueba de carga para identificar cuellos de botella de rendimiento en una aplicación web
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.
- La CLI de Azure instalada en un equipo local.
- 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. - Código de Visual Studio. Si aún no la tiene, descárguela e instálela.
- Git. Si aún no la tiene, descárguela e instálela.
Comprobación de requisitos previos
Antes de empezar valide el entorno:
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.Si no tiene la versión más reciente, actualice la instalación, para lo que debe seguir las instrucciones que encontrará en la guía de instalación del sistema operativo o de la plataforma.
Implementación de la aplicación de ejemplo
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:
az login az account set --subscription <your-Azure-Subscription-ID>
Clone el repositorio de origen de la aplicación de ejemplo:
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
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:
cd nodejs-appsvc-cosmosdb-bottleneck .\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.
Para crear una prueba de carga mediante Azure Portal, siga los pasos descritos en Inicio rápido: Creación de una prueba de carga con un script 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.
az login
Vaya al directorio de la aplicación de ejemplo.
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.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.# 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 formatomyapp.azurewebsites.net
. No incluya lahttps://
parte de la dirección URL.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 --env webapp=$webappHostname
Este comando usa el
Sampleapp.yaml
archivo de configuración de pruebas de carga, que hace referencia alSampleApp.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 yget
es mayor que para lalasttimestamp
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
yget
son similares, mientras que la APIlasttimestamp
se comporta de forma diferente. La causa podría estar relacionada con la base de datos, ya que las APIadd
yget
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 yget
.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 yget
. - 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:
az group delete --name <yourresourcegroup>
Recuerde que al eliminar el grupo de recursos se eliminan todos los recursos que contiene.
Contenido relacionado
- Obtenga más detalles sobre cómo diagnosticar pruebas con errores
- Supervisión de métricas del lado servidor para identificar cuellos de botella de rendimiento en la aplicación
- Definición de criterios de error de prueba de carga para validar los resultados de las pruebas en función de los requisitos del servicio
- Obtenga más información sobre los conceptos clave de Azure Load Testing.