Нагрузочное тестирование веб-приложения

Прежде всего необходимо зарегистрировать действующую подписку Microsoft Azure. Если у вас ее нет, подпишитесь на бесплатную пробную версию, следуя инструкциям по регистрации. Пробная версия Azure предоставляет кредит $ 200 на услуги Azure в течение месяца, но для этого потребуется ввести код своей действующей кредитной карты, чтобы подтвердить личность (со счета снимается плата в размере $ 1, которая позже возвращается на карту).

Стартапы и студенты могут получить постоянный бесплатный доступ в Azure присоединившись к программам Bizspark или Dreamspark соответственно. Обратите внимание, что, хотя служба SendGrid является бесплатной для рассылки до 25000 писем в месяц, Azure Marketplace все равно потребует ввести данные действующей кредитной карты.

Настройка среды для тестирования

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

1

2

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

3 Подключаемся с помощью удаленного рабочего стола (Remote Desktop) со следующими учетными данными.

Twitter API 4 5 6

После создания появится сервис, похожий на этот. Подключаемся к нему удаленно:

7

8

9

10

Теперь мы будем работать в виртуальной машине, работающей в Azure. Запускаем Visual Studio

11

12

Подписчики MSDN: Вход осуществляется с помощью учетной записи Microsoft. Остальные должны заходить с учетной записью Visual Studio.

Теперь необходимо перейти File> New> Project и выбрать Web Performance и Load Test Project

13

Начнем с создания общего теста веб производительности (Web Performance Test)

14

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

Приступаем к записи сессии:

15 16

Здесь я приведу простейший пример только с одним запросом.

17

Прекрасно. Далее создаем автоматизированный случай посещения сайта пользователем. Затем можно смоделировать сотни одновременных посещений с входом на сайт:

18

19

20

Добавляем созданный ранее веб-тест:

21 22

Как видно, мастер предоставляет множество вариантов. Вы можете создать волны нагрузки, постоянный трафик, установить длительность, разогрев и многое другое. Лучше всего подробности описаны в этой статье: http://msdn.microsoft.com/en-us/library/vstudio/dd293540(v=vs.110).aspx . Итак, тест уже настроен и чтобы запустить его, нажимаем Run (Выполнить). Тем временем, я покажу вам, что я использовал для тестирования:

23

24

Очень восхитительная программа, не правда ли:)? Единственное, что она делает, это циклическую нагрузку. Я закачиваю ее в веб-роль (web role) Azure: web role:

25

Теперь она работает.

Результаты

Сначала посмотрим на панель из Visual Studio. Появятся значения ключевых показателей, времени отклика страницы и прочие полезные для понимания работы приложения показатели. Я рекомендую попробовать самостоятельно, и в случае возникновения вопросов ознакомиться со следующей статьей: http://msdn.microsoft.com/en-us/library/vstudio/ee923686(v=vs.110).aspx

26 27

Теперь приступим к наиболее интересной части - результатам "конечного пользователя" (end user). Как показано ниже, мое приложение начало нагружаться пользователями приблизительно в 12:45. Скачок 100 создаваемых каждую секунду запросов пользователей увеличивает нагрузку процессора до 63,58%.

28

Однако мое приложение отвечало нормально, и полученные значения для времени отклика страницы, показали, что результат является приемлемым. Обратите внимание на некоторые аспекты для планирования выделенных ресурсов для приложения (capacity planning): симулируйте нагрузку на определенное количество пользователей, рассчитайте количество экземпляров, необходимых для стабильной работы сайта и проецируйте на более широкий масштаб. Теперь давайте создадим менее спокойный сценарий и запустим тот же тест, стараясь убить процессор. Запускаем тест с 5000 одновременных пользователей, (!) делающих запрос каждую секунду.

29

Как мы видим, время отклика сильно пострадало. Это плохо. И как мы видим, после завершения скачка, оно возвращается в нормальное состояние:

30

Загрузка процессора показана ниже

31

Вот результаты нашего теста:

32 33

Масштабирование

Я намеренно отключил в своих примерах автомасштабирование экземпляров сайта, чтобы знать максимальную мощность каждого из них. Теперь можно просто уввеличить количество экземпляров и определить, как они реагируют на тот же тест. Для этого я увеличу количество экземпляров до 2:

34

35

Теперь запустим тот же полный тест с 2 экземплярами. Кроме того, балансировка нагрузки настраивается на использование алгоритма Round Robin (т.е. отправку запроса чередуя экземпляры). Перед началом теста:

36

Во время теста:

37

Похоже, что производительность опять пострадала. Тем не менее, в случае удваивания количества экземпляров время отклика сокращается на 50% (совпадение?).

38

Как видно из Azure:

39

Заключение

С помощью показанных методов можно узнать, в какой степени веб приложение может выдерживать внешнюю пиковую нагрузку. Это позволяет провести более точную (и фактическую) оценку того, сколько экземпляров нужно назначить приложению для поддержки заданного уровня обслуживания. Это особенно важно для приложений, требующих высокого уровня доступности.

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