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

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.

  1. Abra Windows PowerShell, inicie sesión en Azure y establezca la suscripción:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. 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.

  3. 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
    

    Sugerencia

    Puede instalar PowerShell en Linux/WSL o macOS.

    Después de instalarlo, puede ejecutar el comando anterior como pwsh ./deploymentscript.ps1.

  4. 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.

  5. 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:

  1. Abra una ventana de terminal y escriba el siguiente comando para iniciar sesión en la suscripción de Azure.

    az login
    
  2. Vaya al directorio de la aplicación de ejemplo.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. 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
    
  4. 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
    
  5. 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.

    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 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:

  1. En Azure Portal, vaya al recurso de prueba de carga de Azure.

  2. En el panel izquierdo, seleccione Pruebas para ver la lista de pruebas de carga.

  3. Active la casilla situada junto a la prueba de carga y, a continuación, seleccione Editar.

    Screenshot that shows the list of load tests in the Azure portal, highlighting how to select a test from the list and the Edit button to modify the load test configuration.

  4. Vaya a la pestaña Supervisión y seleccione Agregar o modificar.

  5. Active las casillas de la aplicación de ejemplo que implementó anteriormente y, a continuación, seleccione Aplicar.

    Screenshot that shows how to add app components to a load test in the Azure portal.

    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.

  6. 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:

  1. En Azure Portal, vaya al recurso de prueba de carga de Azure.

  2. En el panel izquierdo, seleccione Pruebas para ver la lista de pruebas de carga.

  3. Seleccione la prueba de carga de la lista para ver los detalles de la prueba y la lista de ejecuciones de pruebas.

  4. 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.

    Screenshot that shows how to start a load test in the Azure portal.

    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.

  5. 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.

    Screenshot that shows the client-side metrics graphs in the load test dashboard in the Azure portal.

    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.

  1. 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.

    Screenshot that shows the client-side metrics.

    Puede ver un patrón similar para Errores, donde la API lasttimestamp tiene menos errores que las otras API.

    Screenshot that shows the error chart.

    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.

  2. 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.

    Screenshot that shows the Azure App Service plan metrics.

    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.

  3. Ahora, mire las métricas del lado servidor de Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    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:

  1. Vaya al recurso de Azure Cosmos DB que aprovisionó como parte de la implementación de la aplicación de ejemplo.

  2. Seleccione la pestaña Data Explorer.

    Screenshot that shows Data Explorer tab.

  3. Seleccione Escalar y Configuración y actualice el valor de rendimiento a 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  4. 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:

  1. 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.

    Screenshot that shows selections for running the load test.

    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.

  2. Una vez finalizada la prueba de carga, compruebe los resultados de Tiempo de respuesta y de Errores de las métricas del lado cliente.

  3. Compruebe las métricas del lado servidor de Azure Cosmos DB y asegúrese de que el rendimiento ha mejorado.

    Screenshot that shows the Azure Cosmos DB client-side metrics after update of the scale settings.

    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:

  1. Seleccione el botón del menú de la esquina superior izquierda y, después, seleccione Grupos de recursos.

  2. En la lista, seleccione el grupo de recursos que creó.

  3. Seleccione Eliminar grupo de recursos. Screenshot of the selections to delete a resource group in the Azure portal.

  4. 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.