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

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

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

Узнайте больше о ключевых понятиях нагрузочного тестирования 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

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

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

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

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

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

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

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

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

  5. В области Нагрузочное тестирование Azure выберите Создать.

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

  6. Укажите следующие сведения, чтобы настроить новый ресурс Azure Load Testing:

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

    Примечание

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

  7. Завершив настройку ресурса, выберите Просмотр и создание.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. На вкладке Параметры добавьте новую переменную среды. Введите webapp в поле Имя и <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-й процентиль для метрики времени отклика для add запросов API и get выше, чем для lasttimestamp API.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Значение нормализованного ЕЗ в Azure Cosmos DB теперь значительно ниже 100 %.

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

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

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

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

Важно!

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

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

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

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

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

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

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

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

az group delete --name <yourresourcegroup>

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

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

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