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. Creará una prueba de carga para una aplicación de Node.js de ejemplo.
La aplicación de ejemplo consta de una API web Node.js, que interactúa con una base de datos NoSQL. Implementará la API web en aplicaciones web de Azure App Service y usará Azure Cosmos DB como base de datos.
Obtenga más información sobre los conceptos clave de Azure Load Testing.
En este tutorial, aprenderá a:
- Implementar la aplicación de ejemplo.
- Crear y ejecutar una prueba de carga.
- Identificar cuellos de botella de rendimiento en la aplicación.
- Quitar un cuello de botella.
- Volver a ejecutar la prueba de carga para comprobar las mejoras de rendimiento.
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 que está 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.
Implementación de la aplicación de ejemplo
Para poder probar la carga de la aplicación de ejemplo, primero debe implementarla y ejecutarla. Para ello, use comandos de la CLI de Azure, comandos de Git y comandos de PowerShell.
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.Para ver los componentes de la aplicación, inicie sesión en Azure Portal y vaya al grupo de recursos que ha creado.
Ahora que tiene la aplicación implementada y en ejecución, puede ejecutar en ella la primera prueba de carga.
Configuración y creación de la prueba de carga
En esta sección, creará una prueba de carga mediante un script de prueba de Apache JMeter de ejemplo.
El repositorio de origen de la aplicación de ejemplo incluye un script de Apache JMeter denominado SampleApp.jmx. Este script realiza tres llamadas API a la aplicación web en cada iteración de prueba:
add
: lleva a cabo una operación de inserción de datos en Azure Cosmos DB para el número de visitantes de la aplicación web.get
: lleva a cabo una operación GET desde Azure Cosmos DB para recuperar el recuento.lasttimestamp
: actualiza la marca de tiempo desde que el último usuario visitó el sitio web.
Nota:
El script de Apache JMeter de ejemplo requiere dos complementos: Custom Thread Groups
y Throughput Shaping Timer
. Para abrir el script en la instancia local de Apache JMeter, debe instalar ambos complementos. Para ello, puede usar el administrador de complementos de Apache JMeter.
Creación de un recurso de Azure Load Testing
El recurso de Azure Load Testing es un recurso de nivel superior para las actividades de prueba de carga. Este recurso proporciona un lugar centralizado para ver y administrar pruebas de carga, resultados de pruebas y artefactos relacionados.
Si ya tiene un recurso de prueba de carga, omita esta sección y vaya a Creación de una prueba de carga.
Si aún no tiene un recurso de Azure Load Testing, cree uno ahora:
Inicie sesión en Azure Portal con las credenciales de la suscripción de Azure.
Seleccione el botón de menú de la esquina superior izquierda del portal y, a continuación, seleccione + Crear un recurso.
Use la barra de búsqueda para buscar Azure Load Testing.
Seleccione Azure Load Testing.
En el panel de Azure Load Testing, seleccione Crear.
Proporcione la siguiente información para configurar el nuevo recurso de Azure Load Testing:
Campo Descripción Suscripción Seleccione la suscripción de Azure que desea usar para este recurso de Azure Load Testing. Grupos de recursos Seleccione un grupo de recursos existente. O bien seleccione Crear nuevo y luego escriba un nombre único para el nuevo grupo de recursos. Nombre Escriba un nombre único para identificar el recurso de Azure Load Testing.
El nombre no puede contener caracteres especiales, como \/""[]:|<>+=;,?*@&, ni espacios en blanco. El nombre no puede comenzar con un guion bajo (_) y no puede terminar con un punto (.) ni un guion (-). Debe tener una longitud de entre 1 y 64 caracteres.Ubicación Seleccione una ubicación geográfica para hospedar el recurso de Azure Load Testing.
Esta ubicación también determina dónde se hospedan los motores de prueba y dónde se originan las solicitudes del cliente de JMeter.Nota
Opcionalmente, puede configurar más detalles en la pestaña Etiquetas. Las etiquetas son pares nombre-valor que permiten categorizar los recursos y ver una facturación consolidada mediante la aplicación de la misma etiqueta en varios recursos y grupos de recursos.
Una vez que haya terminado de configurar el recurso, seleccione Revisar y crear.
Revise todas las opciones de configuración y seleccione Crear para iniciar la implementación del recurso de Azure Load Testing.
Una vez finalizado el proceso, aparecerá un mensaje de implementación correcta.
Para ver el nuevo recurso, seleccione Ir al recurso.
Como alternativa, administre el acceso al recurso de Azure Load Testing.
Azure Load Testing usa el control de acceso basado en rol (RBAC) para administrar los permisos del recurso. Si aparece este mensaje, la cuenta no tiene los permisos necesarios para administrar las pruebas.
Crear una prueba de carga
A continuación, creará una prueba de carga en el recurso de prueba de carga para la aplicación de ejemplo. La prueba de carga se crea mediante un script JMeter existente en el repositorio de aplicaciones de ejemplo.
Vaya al recurso de prueba de carga y seleccione Crear en la página de Información general.
En la pestaña Aspectos básicos, escriba la información Nombre de prueba y Descripción de la prueba. Opcionalmente, puede marcar la casilla Run test after creation (Ejecutar prueba después de crearla) para iniciar automáticamente la prueba de carga después de crearla.
En la pestaña Plan de pruebas, seleccione el método de prueba Script de JMeter y, después, seleccione el script de prueba SampleApp.jmx en el directorio de la aplicación de ejemplo clonado. A continuación, seleccione Cargar para cargar el archivo en Azure y configure la prueba de carga.
Opcionalmente, puede seleccionar y cargar archivos de configuración de Apache JMeter adicionales u otros archivos a los que se hace referencia en el archivo JMX. Por ejemplo, si el script de prueba usa conjuntos de datos CSV, puede cargar los archivos .csv correspondientes.
En la pestaña Parámetros, agregue una nueva variable de entorno. Escriba webapp en Nombre y en Valor. Reemplace el texto del marcador de posición
<yourappname>
por el nombre de la aplicación de ejemplo recién implementada. No incluya el prefijohttps://
.El script de prueba de Apache JMeter usa la variable de entorno para recuperar la dirección URL de la aplicación web. Después, el script invoca las tres API en la aplicación web.
En la pestaña Cargar, configure los detalles siguientes. Puede dejar el valor predeterminado para este tutorial.
Configuración Valor Descripción Instancias de motor 1 Número de motores de prueba paralelos que ejecutan el script de Apache JMeter. En la pestaña Supervisión, especifique los componentes de la aplicación que desea supervisar con las métricas de recursos. Seleccione Agregar o modificar para administrar la lista de componentes de la aplicación.
Seleccione Revisar y crear, revise toda la configuración y, después, seleccione Crear.
Nota
Puede actualizar la configuración de prueba en cualquier momento, por ejemplo, para cargar un archivo JMX diferente. Elija la prueba en la lista de pruebas y, a continuación, seleccione Editar.
Ejecución de la prueba de carga en Azure Portal
En esta sección, usará Azure Portal para iniciar manualmente la prueba de carga que creó anteriormente. Si ha marcado la casilla Run test after creation (Ejecutar prueba después de crearla), la prueba ya estará en ejecución.
Seleccione Pruebas para ver la lista de pruebas y, a continuación, seleccione la prueba que creó.
Sugerencia
Puede usar el cuadro de búsqueda y el filtro Intervalo de tiempo para limitar el número de pruebas.
En la página de detalles de la prueba, seleccione Ejecutar o Ejecutar prueba. A continuación, seleccione Ejecutar en el panel de confirmación Ejecutar prueba para iniciar la prueba de carga.
Azure Load Testing comienza a supervisar y mostrar las métricas del servidor de la aplicación en el panel.
Puede ver las métricas del lado cliente de streaming mientras se ejecuta la prueba. De forma predeterminada, los resultados se actualizan automáticamente cada cinco segundos.
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.
Identificación de 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. Observará que el percentil 90 de la métrica Tiempo de respuesta para las solicitudes de API y
get
es mayor que para la APIlasttimestamp
.Puede ver un patrón similar para Errores, donde la API 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 podría haber provocado errores de limitación de la base de datos. Los tiempos de respuesta también pueden ser superiores para las API web
add
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 Escala y configuración y actualice el valor del 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.
Verá una nueva entrada en la ejecución de la prueba con una columna de estado que pasará por los estados Aprovisionamiento, Ejecutando 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 cambiado la configuración de la escalabilidad de la base de datos, verá lo siguiente:
- El tiempo de respuesta de las API
add
yget
ha mejorado. - El consumo de RU normalizado permanece muy por debajo del límite.
Como resultado, el rendimiento general de la aplicación ha mejorado.
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.
Pasos siguientes
Avance al siguiente tutorial para aprender a configurar un flujo de trabajo de pruebas de regresión automatizadas mediante Azure Pipelines o Acciones de GitHub.