Учебник. Выполнение нагрузочного теста для выявления узких мест производительности в веб-приложении

В этом руководстве описано, как определить узкие места производительности в веб-приложении с помощью нагрузочного тестирования Azure. Вы имитируете нагрузку для примера веб-приложения Node.js, а затем используете панель мониторинга нагрузочного теста для анализа метрик на стороне клиента и сервера.

Пример приложения состоит из веб-API Node.js, который взаимодействует с базой данных NoSQL. Вы развертываете веб-API для веб-приложений службы приложение Azure и используете Azure Cosmos DB в качестве базы данных.

В этом руководстве описано следующее:

  • Разверните пример приложения.
  • создание и запуск нагрузочного теста.
  • Добавьте компоненты приложения Azure в нагрузочный тест.
  • Определите узкие места производительности с помощью панели мониторинга нагрузочного теста.

Необходимые компоненты

Предварительные требования проверка

Прежде чем начать, проверьте свою среду:

Развертывание примера приложения

В этом руководстве вы создаете нагрузку на пример веб-приложения, развернутого в службе приложение Azure. Используйте команды Azure CLI, команды Git и команды PowerShell для развертывания примера приложения в подписке Azure.

  1. Откройте Windows PowerShell, войдите в Azure и задайте подписку:

    az login
    az account set --subscription <your-Azure-Subscription-ID>
    
  2. Клонируйте исходный репозиторий примера приложения:

    git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
    

    Пример приложения — это приложение Node.js, состоящее из веб-компонента службы приложение Azure и базы данных Azure Cosmos DB. Репозиторий включает скрипт PowerShell, который развертывает пример приложения в подписке Azure. Он также содержит скрипт Apache JMeter, который вы будете использовать в последующих шагах.

  3. Перейдите в каталог приложения Node.js и разверните пример приложения с помощью этого скрипта PowerShell:

    cd nodejs-appsvc-cosmosdb-bottleneck
    .\deploymentscript.ps1
    

    Совет

    Вы можете установить PowerShell в Linux или WSL или macOS.

    После установки вы можете выполнить предыдущую команду как pwsh ./deploymentscript.ps1.

  4. В командной строке укажите:

    • Идентификатор вашей подписки Azure.
    • Уникальное имя веб-приложения.
    • Расположение. По умолчанию это расположение eastus. Коды регионов можно получить, выполнив команду Get-AzLocation .

    Важно!

    Для имени веб-приложения используйте только строчные буквы и цифры. Не используйте пробелы или специальные символы.

  5. После завершения развертывания перейдите к работающему примеру приложения, открыв https://<yourappname>.azurewebsites.net в окне браузера.

Теперь, когда у вас есть пример приложения, развернутого и запущенного, можно создать ресурс нагрузочного тестирования Azure и нагрузочный тест.

Создание нагрузочного теста

В этом руководстве описано, как создать нагрузочный тест с помощью Azure CLI, отправив скрипт теста JMeter (jmx файл). Пример репозитория приложений уже содержит файл конфигурации нагрузочного теста и скрипт теста JMeter.

Чтобы создать нагрузочный тест с помощью портал Azure, выполните действия, описанные в кратком руководстве. Создайте нагрузочный тест с помощью скрипта JMeter.

Выполните следующие действия, чтобы создать ресурс нагрузочного тестирования Azure и нагрузочный тест с помощью Azure CLI:

  1. Откройте окно терминала и введите следующую команду, чтобы войти в подписку Azure.

    az login
    
  2. Перейдите в пример каталога приложения.

    cd nodejs-appsvc-cosmosdb-bottleneck
    
  3. Создайте группу ресурсов для ресурса нагрузочного тестирования Azure.

    Кроме того, можно повторно использовать группу ресурсов примера приложения, развернутого ранее.

    Замените <load-testing-resource-group-name> заполнитель текста именем группы ресурсов.

    resourceGroup="<load-testing-resource-group-name>"
    location="East US"
    
    az group create --name $resourceGroup --location $location
    
  4. Создайте ресурс нагрузочного тестирования Azure с az load create помощью команды.

    Замените <load-testing-resource-name> заполнитель текста именем ресурса нагрузочного тестирования.

    # 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. Создайте нагрузочный тест для имитации нагрузки для примера приложения с az load test create помощью команды.

    Замените <web-app-hostname> заполнитель текста именем узла Служба приложений примера приложения. Это значение имеет форму myapp.azurewebsites.net. Не включайте https:// часть 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
    

    Эта команда использует файл конфигурации нагрузочного теста, который ссылается Sampleapp.yaml на SampleApp.jmx скрипт тестирования JMeter. Для передачи примера имени узла приложения в нагрузочный тест используется параметр командной строки.

Теперь у вас есть ресурс нагрузочного тестирования Azure и нагрузочный тест для создания нагрузки для примера веб-приложения в подписке Azure.

Добавление компонентов приложения Azure для мониторинга приложения

Нагрузочное тестирование Azure позволяет отслеживать метрики ресурсов для компонентов Azure приложения. Анализируя эти серверные метрики, вы можете определить проблемы производительности и стабильности в приложении непосредственно на панели мониторинга Нагрузочного тестирования Azure.

В этом руководстве вы добавите компоненты Azure для примера приложения, развернутого в Azure, например службу приложений, учетную запись Cosmos DB и многое другое.

Чтобы добавить компоненты приложения Azure для примера приложения в нагрузочный тест:

  1. В портал Azure перейдите к ресурсу нагрузочного тестирования Azure.

  2. На левой панели выберите "Тесты ", чтобы просмотреть список нагрузочных тестов

  3. Выберите проверка box рядом с нагрузочного теста и нажмите кнопку "Изменить".

    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. Перейдите на вкладку "Мониторинг" и нажмите кнопку "Добавить или изменить".

  5. Выберите проверка boxes для примера приложения, развернутого ранее, и нажмите кнопку "Применить".

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

    Совет

    Фильтр группы ресурсов можно использовать для просмотра только ресурсов Azure в примере группы ресурсов приложения.

  6. Нажмите кнопку "Применить" , чтобы сохранить изменения в конфигурации нагрузочного теста.

Вы успешно добавили компоненты приложения Azure для примера приложения в нагрузочный тест, чтобы включить мониторинг метрик на стороне сервера во время выполнения нагрузочного теста.

Запуск нагрузочного теста

Теперь можно запустить нагрузочный тест, чтобы имитировать нагрузку для примера приложения, развернутого в подписке Azure. В этом руководстве вы запустите нагрузочный тест из портал Azure. Кроме того, можно настроить рабочий процесс CI/CD для запуска нагрузочного теста.

Чтобы запустить нагрузочный тест в портал Azure, выполните следующие действия.

  1. В портал Azure перейдите к ресурсу нагрузочного тестирования Azure.

  2. На левой панели выберите "Тесты ", чтобы просмотреть список нагрузочных тестов

  3. Выберите нагрузочный тест из списка, чтобы просмотреть сведения о тесте и список тестов.

  4. Нажмите кнопку "Выполнить", а затем снова запустите нагрузочный тест.

    При необходимости можно ввести описание тестового запуска.

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

    При запуске нагрузочного теста Azure Load Testing развертывает скрипт теста JMeter и все дополнительные файлы в экземплярах тестового модуля, а затем запускает нагрузочный тест.

  5. При запуске нагрузочного теста отобразится панель мониторинга нагрузочного теста.

    Если панель мониторинга не отображается, можно выбрать "Обновить ", а затем выбрать тестовый запуск из списка.

    Панель мониторинга нагрузочного теста содержит сведения о тестовом выполнении, такие как метрики на стороне клиента и метрики приложения на стороне сервера. Графики на панели мониторинга обновляются автоматически.

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

    Можно применить несколько фильтров или объединить результаты к разным процентилям для настройки диаграмм.

    Совет

    Вы можете остановить нагрузочный тест в любое время из портал Azure, нажав кнопку "Остановить".

Подождите, пока нагрузочный тест завершится полностью, прежде чем перейти к следующему разделу.

Использование серверных метрик для выявления узких мест производительности

В этом разделе вы анализируете результаты нагрузочного теста, чтобы определить узкие места производительности в приложении. Проверьте метрики на стороне клиента и на стороне сервера, чтобы определить первопричину проблемы.

  1. Сначала рассмотрим метрики на стороне клиента. Обратите внимание, что 90-й процентиль для метрики времени отклика для getadd запросов API выше, чем для lasttimestamp API.

    Screenshot that shows the client-side metrics.

    Вы можете увидеть аналогичный шаблон ошибок, где lasttimestamp API имеет меньше ошибок, чем другие API.

    Screenshot that shows the error chart.

    Результаты add и get API аналогичны, а lasttimestamp API ведет себя по-разному. Причина может быть связана с базой данных, так как addget и API включают доступ к базе данных.

  2. Чтобы изучить это узкое место более подробно, прокрутите вниз до раздела панели мониторинга метрик на стороне сервера.

    Метрики на стороне сервера содержат подробные сведения о компонентах приложения Azure: приложение Azure плане обслуживания, веб-приложении службы приложение Azure и Azure Cosmos DB.

    Screenshot that shows the Azure App Service plan metrics.

    В метриках плана службы приложение Azure можно увидеть, что метрики процента ЦП и процента памяти находятся в допустимом диапазоне.

  3. Теперь ознакомьтесь с метриками на стороне сервера Azure Cosmos DB.

    Screenshot that shows Azure Cosmos DB metrics.

    Обратите внимание, что метрика потребления нормализованных единиц запросов показывает, что база данных быстро выполнялась при использовании ресурсов на 100 %. Высокая загрузка ресурсов может привести к ошибкам регулирования базы данных. Кроме того, это может увеличить время отклика add для веб-API и get веб-ИНТЕРФЕЙСов.

    Вы также можете увидеть, что метрика подготовленной пропускной способности для экземпляра Azure Cosmos DB имеет максимальную пропускную способность в 400 единиц. Увеличение подготовленной пропускной способности базы данных может устранить проблему с производительностью.

Увеличение пропускной способности базы данных

В этом разделе вы выделяете дополнительные ресурсы для базы данных для устранения узких мест производительности.

Для Azure Cosmos DB увеличьте параметр масштабирования базы данных ЕЗ:

  1. Перейдите к ресурсу Azure Cosmos DB, подготовленному в рамках примера развертывания приложения.

  2. Перейдите на вкладку "Данные Обозреватель".

    Screenshot that shows Data Explorer tab.

  3. Выберите "Масштаб и Параметры" и обновите значение пропускной способности до 1200.

    Screenshot that shows the updated Azure Cosmos DB scale settings.

  4. Выберите Save (Сохранить), чтобы сохранить изменения.

Проверка улучшений производительности

Теперь, когда вы увеличили пропускную способность базы данных, повторно запустите нагрузочный тест и убедитесь, что результаты производительности улучшены:

  1. На панели мониторинга тестового запуска выберите "Повторно выполнить" и выберите "Повторно выполнить" на панели тестов повторного запуска.

    Screenshot that shows selections for running the load test.

    Вы можете увидеть новую запись тестового запуска с столбцом состояния, который циклит через состояния подготовки, выполнения и готового состояния. В любое время выберите тестовый запуск, чтобы отслеживать ход выполнения нагрузочного теста.

  2. После завершения нагрузочного теста проверка результаты времени отклика и результаты ошибок метрик на стороне клиента.

  3. Проверьте метрики на стороне сервера для Azure Cosmos DB и убедитесь, что производительность улучшена.

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

    Нормализованное значение потребления единиц запросов в Azure Cosmos DB теперь значительно ниже 100 %.

Теперь, когда вы обновили параметры масштабирования базы данных, вы увидите следующее:

  • Время отклика add для API улучшилось get .
  • Нормализованное потребление единиц запросов остается в пределах предела.

В результате улучшена общая производительность приложения.

Очистка ресурсов

Важно!

Вы можете повторно использовать ресурс Нагрузочного тестирования Azure, созданный для других руководств по нагрузочному тестированию Azure и статей.

Если вы не планируете использовать какие-либо созданные ресурсы, удалите их, чтобы не нести никаких дополнительных расходов. Если вы развернули пример приложения в другой группе ресурсов, может потребоваться повторить следующие действия.

Чтобы удалить ресурсы с помощью портал Azure, выполните следующие действия.

  1. Нажмите кнопку меню в левом верхнем углу и выберите группы ресурсов.

  2. Выберите созданную группу ресурсов из списка.

  3. Выберите команду Удалить группу ресурсов. Screenshot of the selections to delete a resource group in the Azure portal.

  4. Введите имя группы ресурсов. Затем выберите Удалить.

Чтобы удалить ресурсы с помощью Azure CLI, введите следующую команду:

az group delete --name <yourresourcegroup>

Помните, что удаление группы ресурсов удаляет все ресурсы в ней.