Учебник. Выполнение нагрузочного теста для выявления узких мест производительности в веб-приложении
В этом руководстве описано, как определить узкие места производительности в веб-приложении с помощью нагрузочного тестирования Azure. Вы создадите нагрузочный тест для примера приложения Node.js.
Пример приложения состоит из Node.js веб-API, который взаимодействует с базой данных NoSQL. Вы развернете веб-API для Служба приложений Azure веб-приложений и будете использовать Azure Cosmos DB в качестве базы данных.
Узнайте больше о ключевых понятиях нагрузочного тестирования Azure.
Из этого руководства вы узнаете, как выполнять следующие задачи:
- Разверните пример приложения.
- Создайте и запустите нагрузочный тест.
- Определите узкие места производительности в приложении.
- Удалите узкое место.
- Повторно запустите нагрузочный тест, чтобы проверить повышение производительности.
Предварительные требования
- Учетная запись Azure с активной подпиской. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу.
- Azure CLI версии 2.2.0 или более поздней. Выполните команду
az --version
, чтобы найти версию, установленную на компьютере. Если вам нужно установить или обновить Azure CLI, см. статью Установка Azure CLI. - Visual Studio Code. Если у вас его нет, скачайте и установите его.
- Git. Если у вас его нет, скачайте и установите его.
Развертывание примера приложения
Прежде чем вы сможете протестировать пример приложения, необходимо развернуть и запустить его. Для этого используйте команды Azure CLI, команды Git и команды PowerShell.
Откройте Windows PowerShell, войдите в Azure и настройте подписку:
az login az account set --subscription <your-Azure-Subscription-ID>
Клонируйте исходный репозиторий примера приложения:
git clone https://github.com/Azure-Samples/nodejs-appsvc-cosmosdb-bottleneck.git
Пример приложения представляет собой Node.js приложение, состоящее из веб-компонента Служба приложений Azure и базы данных Azure Cosmos DB. Репозиторий содержит скрипт PowerShell, который развертывает пример приложения в подписке Azure. Он также содержит скрипт Apache JMeter, который вы будете использовать на последующих шагах.
Перейдите в каталог приложения Node.js и разверните пример приложения с помощью следующего скрипта PowerShell:
cd nodejs-appsvc-cosmosdb-bottleneck .\deploymentscript.ps1
В командной строке укажите:
- Идентификатор вашей подписки Azure.
- Уникальное имя веб-приложения.
- Расположение. По умолчанию используется
eastus
расположение . Коды регионов можно получить, выполнив команду Get-AzLocation .
Важно!
В имени веб-приложения используйте только строчные буквы и цифры. Не используйте пробелы или специальные символы.
После завершения развертывания перейдите к работающему примеру приложения, открыв
https://<yourappname>.azurewebsites.net
в окне браузера.Чтобы просмотреть компоненты приложения, войдите в портал 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, создайте его:
Войдите на портал Azure с помощью учетных данных вашей подписки Azure.
Нажмите кнопку меню в левом верхнем углу портала и выберите + Создать ресурс.
Используйте строку поиска, чтобы найти нагрузочное тестирование Azure.
Выберите Нагрузочное тестирование Azure.
В области Нагрузочное тестирование Azure выберите Создать.
Укажите следующие сведения, чтобы настроить новый ресурс Azure Load Testing:
Поле Описание Подписка Выберите подписку Azure, которую вы хотите использовать для этого ресурса нагрузочного тестирования Azure. Группа ресурсов Выберите имеющуюся группу ресурсов. Или выберите Создать, а затем введите уникальное имя для новой группы ресурсов. имя; Введите уникальное имя для идентификации ресурса Azure Load Testing.
Имя не может содержать специальные символы, такие как \/""[]:|<>+=;,?*@&, или пробелы. Имя не может начинаться с символа подчеркивания (_) и не может заканчиваться точкой (.) или дефисом (-). Длина должна быть от 1 до 64 символов.Расположение Выберите географическое расположение для размещения ресурса Azure Load Testing.
Это расположение также определяет, где размещаются модули тестирования и откуда исходят клиентские запросы JMeter.Примечание
При необходимости можно настроить дополнительные сведения на вкладке Теги . Теги — это пары "имя-значение", которые позволяют классифицировать ресурсы и просматривать консолидированное выставление счетов, применяя один и тот же тег к нескольким ресурсам и группам ресурсов.
Завершив настройку ресурса, выберите Просмотр и создание.
Просмотрите все параметры конфигурации и выберите Создать , чтобы начать развертывание ресурса Azure Load Testing.
После завершения процесса появится сообщение об успешном развертывании.
Чтобы просмотреть новый ресурс, выберите Перейти к ресурсу.
При необходимости можно управлять доступом к ресурсу Azure Load Testing.
Нагрузочное тестирование Azure использует управление доступом на основе ролей (RBAC) для управления разрешениями для ресурса. Если вы столкнулись с этим сообщением, у вашей учетной записи нет необходимых разрешений для управления тестами.
Создание нагрузочного теста
Затем создайте нагрузочный тест в ресурсе нагрузочного тестирования для примера приложения. Нагрузочный тест создается с помощью существующего скрипта JMeter в репозитории примеров приложений.
Перейдите к ресурсу нагрузочного тестирования и выберите Создать на странице Обзор .
На вкладке Основные сведения введите имя теста и описание теста . При необходимости можно установить флажок Запустить тест после создания , чтобы автоматически запустить нагрузочный тест после его создания.
На вкладке План тестирования выберите метод теста скрипта JMeter , а затем выберите тестовый скрипт SampleApp.jmx в каталоге клонированного примера приложения. Затем выберите Отправить , чтобы отправить файл в Azure и настроить нагрузочный тест.
При необходимости можно выбрать и отправить дополнительные файлы конфигурации Apache JMeter или другие файлы, на которые ссылается JMX-файл. Например, если тестовый скрипт использует наборы данных CSV, можно отправить соответствующие .csv файлы.
На вкладке Параметры добавьте новую переменную среды. Введите webapp в поле Имя и
<yourappname>.azurewebsites.net
Значение. Замените текст<yourappname>
заполнителя именем только что развернутого примера приложения. Не включайтеhttps://
префикс.Скрипт тестирования Apache JMeter использует переменную среды для получения URL-адреса веб-приложения. Затем скрипт вызывает три API в веб-приложении.
На вкладке Загрузка настройте следующие сведения. Вы можете оставить значение по умолчанию для этого руководства.
Параметр Значение Описание Экземпляры подсистемы 1 Количество параллельных модулей тестирования, выполняющих скрипт Apache JMeter. На вкладке Мониторинг укажите компоненты приложения, которые необходимо отслеживать с помощью метрик ресурсов. Выберите Добавить или изменить , чтобы управлять списком компонентов приложения.
Выберите Просмотр и создание, проверьте все параметры и нажмите кнопку Создать.
Примечание
Вы можете обновить конфигурацию теста в любое время, например, чтобы отправить другой JMX-файл. Выберите тест в списке тестов и нажмите кнопку Изменить.
Запуск нагрузочного теста в портал Azure
В этом разделе вы будете использовать портал Azure для запуска созданного ранее нагрузочного теста вручную. Если установлен флажок Запустить тест после создания , тест уже будет выполняться.
Выберите Тесты , чтобы просмотреть список тестов, а затем выберите созданный тест.
Совет
Чтобы ограничить количество тестов, можно использовать поле поиска и фильтр диапазона времени .
На странице сведений о тесте выберите Выполнить или Запустить тест. Затем выберите Выполнить в области Подтверждения запуска теста , чтобы запустить нагрузочный тест.
Нагрузочное тестирование Azure начинает отслеживать и отображать метрики сервера приложения на панели мониторинга.
Вы можете увидеть метрики на стороне клиента потоковой передачи во время выполнения теста. По умолчанию результаты обновляются автоматически каждые пять секунд.
Для настройки диаграмм можно применить несколько фильтров или агрегировать результаты к разным процентилям.
Совет
Нагрузочный тест можно остановить в любое время из портал Azure, нажав кнопку Остановить.
Дождитесь завершения нагрузочного теста, прежде чем переходить к следующему разделу.
Узкие места производительности
В этом разделе вы проанализируете результаты нагрузочного теста, чтобы выявить узкие места производительности в приложении. Изучите метрики на стороне клиента и сервера, чтобы определить первопричину проблемы.
Сначала посмотрите на метрики на стороне клиента. Вы заметите, что 90-й процентиль для метрики времени отклика для
add
запросов API иget
выше, чем дляlasttimestamp
API.Вы можете увидеть аналогичный шаблон для ошибок, где
lasttimestamp
API содержит меньше ошибок, чем другие API.Результаты
add
API иget
похожи, в то время какlasttimestamp
API ведет себя по-разному. Причина может быть связана с базой данных, так какadd
и API иget
связаны с доступом к базе данных.Чтобы изучить это узкое место более подробно, прокрутите вниз до раздела Панель мониторинга метрик на стороне сервера .
Метрики на стороне сервера содержат подробные сведения о компонентах приложения Azure: план Служба приложений Azure, веб-приложение Служба приложений Azure и Azure Cosmos DB.
В метриках для плана Служба приложений Azure можно увидеть, что метрики ЦП и Процент памяти находятся в допустимом диапазоне.
Теперь ознакомьтесь с метриками на стороне сервера Azure Cosmos DB.
Обратите внимание, что метрика Нормализованное потребление ЕЗ показывает, что база данных была быстро запущена при 100% использовании ресурсов. Высокая загрузка ресурсов могла привести к ошибкам регулирования базы данных. Это также может увеличить время отклика
add
для веб-API иget
.Вы также можете увидеть, что метрика Подготовленная пропускная способность для экземпляра Azure Cosmos DB имеет максимальную пропускную способность в 400 ЕЗ. Увеличение подготовленной пропускной способности базы данных может решить проблему с производительностью.
Увеличение пропускной способности базы данных
В этом разделе вы наделите больше ресурсов для базы данных, чтобы устранить узкое место производительности.
Для Azure Cosmos DB увеличьте параметр масштабирования единиц запросов базы данных:
Перейдите к ресурсу Azure Cosmos DB, подготовленному в рамках развертывания примера приложения.
Перейдите на вкладку Data Explorer.
Выберите Параметры масштабирования &и обновите значение пропускной способности до 1200.
Выберите Save (Сохранить), чтобы сохранить изменения.
Проверка улучшений производительности
Теперь, когда вы увеличили пропускную способность базы данных, повторно запустите нагрузочный тест и убедитесь, что результаты производительности улучшились:
На панели мониторинга тестового запуска выберите Повторно выполнить, а затем выберите Повторно выполнить в области Повторное выполнение теста .
Вы увидите новую запись тестового запуска со столбцом состояния, который циклически проходит по состояниям Подготовка, Выполнение и Готово . В любой момент выберите тестовый запуск, чтобы отслеживать ход выполнения нагрузочного теста.
После завершения нагрузочного теста проверьте результаты времени отклика и результаты ошибок для клиентских метрик.
Проверьте метрики на стороне сервера для Azure Cosmos DB и убедитесь, что производительность повышена.
Значение нормализованного ЕЗ в Azure Cosmos DB теперь значительно ниже 100 %.
Теперь, когда вы изменили параметры масштабирования базы данных, вы увидите, что:
- Время отклика
add
для API иget
улучшилось. - Нормализованное потребление единиц запросов остается значительно ниже предела.
В результате общая производительность приложения улучшилась.
Очистка ресурсов
Важно!
Вы можете повторно использовать ресурс Нагрузочного тестирования Azure, созданный для других руководств по azure Load Testing и статей с инструкциями.
Если вы не планируете использовать какие-либо из созданных ресурсов, удалите их, чтобы не взимать дополнительную плату. Если вы развернули пример приложения в другой группе ресурсов, можно повторить следующие действия.
Чтобы удалить ресурсы с помощью портал Azure:
Нажмите кнопку меню в левом верхнем углу и выберите Группы ресурсов.
Выберите созданную группу ресурсов из списка.
Выберите Удалить группу ресурсов.
Введите имя группы ресурсов. Теперь щелкните Удалить.
Чтобы удалить ресурсы с помощью Azure CLI, введите следующую команду:
az group delete --name <yourresourcegroup>
Помните, что при удалении группы ресурсов удаляются все ресурсы в ней.
Дальнейшие действия
Перейдите к следующему руководству, чтобы узнать, как настроить рабочий процесс автоматического тестирования регрессии с помощью Azure Pipelines или GitHub Actions.