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

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

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

Дополнительные сведения о ключевых понятиях для нагрузочного тестирования Azure.

Из этого руководства вы узнаете, как выполнять следующие задачи:

  • Разверните пример приложения.
  • Создание и запуск нагрузочного теста.
  • Определите узкие места производительности в приложении.
  • Удалите узкие места.
  • Повторно запустите нагрузочный тест, чтобы проверить улучшения производительности.

Важно!

Сейчас нагрузочное тестирование Azure находится на этапе предварительной версии. Юридические термины, применимые к функциям Azure, которые находятся в бета-версии, предварительной версии или еще не выпущены в общедоступной версии, см. в дополнительных условиях использования для предварительных версий Microsoft Azure.

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

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

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

  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 в окне браузера.

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

    Снимок экрана: список групп ресурсов Azure.

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

Настройка и создание нагрузочного теста

В этом разделе описано, как создать нагрузочный тест с помощью примера скрипта тестирования Apache JMeter.

Исходный репозиторий примера приложения включает скрипт Apache JMeter с именем SampleApp.jmx. Этот скрипт выполняет три вызова API к веб-приложению в каждой тестовой итерации:

  • add: выполняет операцию вставки данных в Azure Cosmos DB для количества посетителей в веб-приложении.
  • get: выполняет операцию GET из Azure Cosmos DB для получения количества.
  • lasttimestamp: Обновления метку времени с момента последнего пользователя, отправившегося на веб-сайт.

Примечание

Для примера скрипта Apache JMeter требуются два подключаемых модуля: Custom Thread Groups и Throughput Shaping Timer. Чтобы открыть скрипт в локальном экземпляре Apache JMeter, необходимо установить оба подключаемых модуля. Для этого можно использовать диспетчер подключаемых модулей Apache JMeter .

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

Ресурс нагрузочного тестирования — это ресурс верхнего уровня для действий нагрузочного тестирования. Этот ресурс предоставляет централизованное место для просмотра нагрузочных тестов, результатов тестов и связанных артефактов и управления ими.

Если у вас уже есть ресурс нагрузочного тестирования, пропустите этот раздел и продолжайте создавать нагрузочный тест.

Если у вас еще нет ресурса нагрузочного тестирования, создайте его сейчас:

  1. Войдите на портал Azure с помощью учетных данных вашей подписки Azure.

  2. Нажмите кнопку меню в левом верхнем углу портала, а затем нажмите кнопку +Создать ресурс.

    Снимок экрана: кнопка для создания ресурса.

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

  4. Выберите "Нагрузочное тестирование Azure".

  5. На панели "Нагрузочное тестирование Azure" нажмите кнопку "Создать".

    Снимок экрана: панель

  6. Укажите следующие сведения для настройки нового ресурса нагрузочного тестирования Azure:

    Поле Описание
    Подписка Выберите подписку Azure, которую вы хотите использовать для этого ресурса нагрузочного тестирования Azure.
    Группа ресурсов Выберите имеющуюся группу ресурсов. Или нажмите кнопку "Создать", а затем введите уникальное имя новой группы ресурсов.
    имя; Введите уникальное имя для идентификации ресурса Нагрузочного тестирования Azure.
    Имя не может содержать специальные символы, такие как \/"[]:|<>+=;,?*@&или пробелы. Имя не может начинаться с символа подчеркивания (_), и оно не может заканчиваться точкой (.) или дефисом (-). Длина должна составлять от 1 до 64 символов.
    Расположение Выберите географическое расположение для размещения ресурса Нагрузочного тестирования Azure.
    Это расположение также определяет, откуда размещаются тестовые подсистемы и откуда исходят клиентские запросы JMeter.

    Примечание

    При необходимости можно настроить дополнительные сведения на вкладке "Теги ". Теги — это пары "имя-значение", позволяющие классифицировать ресурсы и просматривать консолидированное выставление счетов, применяя один и тот же тег к нескольким ресурсам и группам ресурсов.

  7. Завершив настройку ресурса, нажмите кнопку "Проверить и создать".

  8. Просмотрите все параметры конфигурации и нажмите кнопку "Создать ", чтобы начать развертывание ресурса нагрузочного тестирования Azure.

    По завершении процесса появляется сообщение об успешном развертывании.

  9. Чтобы просмотреть новый ресурс, выберите "Перейти к ресурсу".

    Снимок экрана: экран завершения развертывания.

  10. При необходимости можно управлять доступом к ресурсу Нагрузочного тестирования Azure.

    Нагрузочное тестирование Azure использует управление доступом на основе ролей (RBAC) для управления разрешениями для ресурса. Если вы столкнулись с этим сообщением, у вашей учетной записи нет необходимых разрешений для управления тестами.

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

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

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

  1. Перейдите к ресурсу нагрузочного тестирования и выберите "Создать тест " на панели команд.

    Снимок экрана: кнопка для создания нового теста.

  2. На вкладке "Основные сведения" введите имя теста и описание теста . При необходимости можно установить флажок "Выполнить тест после создания" , чтобы автоматически запустить нагрузочный тест после его создания.

    Снимок экрана: вкладка

  3. На вкладке "План тестирования" выберите метод теста скрипта JMeter , а затем выберите скрипт теста SampleApp.jmx из клонированного каталога приложения. Затем нажмите кнопку "Отправить ", чтобы отправить файл в Azure и настроить нагрузочный тест.

    Снимок экрана: вкладка

    При необходимости можно выбрать и отправить дополнительные файлы конфигурации Apache JMeter или другие файлы, на которые ссылается JMX-файл. Например, если в тестовом скрипте используются наборы данных CSV, можно отправить соответствующие .csv файлы.

  4. На вкладке "Параметры" добавьте новую переменную среды. Введите веб-приложение для имени и <yourappname>.azurewebsites.netзначения. Замените замещающий текст <yourappname> именем только что развернутого примера приложения. Не включайте https:// префикс.

    Скрипт тестирования Apache JMeter использует переменную среды для получения URL-адреса веб-приложения. Затем скрипт вызывает три API в веб-приложении.

    Снимок экрана: вкладка параметров для добавления переменной среды.

  5. На вкладке "Загрузка" настройте следующие сведения. Для этого руководства можно оставить значение по умолчанию.

    Параметр Значение Описание
    Экземпляры подсистемы 1 Количество параллельных модулей тестирования, выполняющих скрипт Apache JMeter.

    Снимок экрана: вкладка

  6. На вкладке "Мониторинг" укажите компоненты приложения, которые необходимо отслеживать с помощью метрик ресурсов. Выберите "Добавить или изменить ", чтобы управлять списком компонентов приложения.

    Снимок экрана: вкладка

    Снимок экрана: добавление ресурсов Azure для мониторинга во время нагрузочного теста.

    Снимок экрана: вкладка

  7. Выберите "Просмотр и создание", "Просмотрите все параметры" и нажмите кнопку "Создать".

    Снимок экрана: вкладка для просмотра и создания теста.

Примечание

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

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

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

  1. Выберите "Тесты ", чтобы просмотреть список тестов, а затем выберите созданный тест.

    Снимок экрана: список тестов.

    Совет

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

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

    Снимок экрана: выбор для выполнения теста.

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

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

    Снимок экрана: панель мониторинга с результатами теста.

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

    Совет

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

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

Узкие места производительности

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

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

    Снимок экрана: метрики на стороне клиента.

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

    Снимок экрана: диаграмма ошибок.

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

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

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

    Снимок экрана: метрики плана Служба приложений Azure.

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

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

    Снимок экрана: метрики Azure Cosmos DB.

    Обратите внимание, что метрика нормализованного потребления единиц запросов показывает, что база данных быстро выполнялась при 100 % использовании ресурсов. Высокая загрузка ресурсов могла привести к ошибкам регулирования базы данных. Это также может увеличить время отклика add для веб-API.get

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

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

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

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

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

  2. Выберите вкладку Data Explorer.

    Снимок экрана: вкладка Data Explorer

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

    Снимок экрана: обновленные параметры масштабирования Azure Cosmos D B.

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

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

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

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

    Снимок экрана: выбор для запуска нагрузочного теста.

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

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

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

    Снимок экрана: метрики на стороне клиента Azure Cosmos D B после обновления параметров масштабирования.

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

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

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

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

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

Важно!

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

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

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

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

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

  3. Выберите Удалить группу ресурсов. Снимок экрана с выбранными параметрами для удаления группы ресурсов на портале Azure.

  4. Введите имя группы ресурсов. Теперь щелкните Удалить.

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

az group delete --name <yourresourcegroup>

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

Дальнейшие действия

Перейдите к следующему руководству, чтобы узнать, как настроить рабочий процесс автоматического тестирования регрессии с помощью Azure Pipelines или GitHub Actions.