вторник, 6 апреля 2010 г.

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

Сдавая веб-сервер в повседневную эксплуатацию, нужно быть уверенным, что он выдержит планируемую нагрузку. Как понять, что код написанный разработчиками выдержит запланированный наплыв посетителей? И что важнее, как понять какой при этом будет запас мощности?
Необходимо провести тест производительности сайта, чтобы выявить потенциально узкие места и наметить планы по их рефакторингу. Рассмотрим методологию тестирования.





Тест производительности делится на 2 модуля:
  • Нагрузочный (Load-testing) – определяется работоспособность системы при некоторой строго заданной заранее (планируемой, рабочей) нагрузке.
  • Устойчивости (Stress-testing) – применяется для проверки параметров системы в анормальных и экстремальных условиях, основная задача во время этого теста - попытаться нарушить работу системы. При этом определяется потолок производительности и способность системы к сохранению целостности данных при возникновении внештатных аварийных ситуаций.
Во время тестирования имитируется одновременная работа нескольких сотен или тысяч посетителей. Для большей правдивости каждый из виртуальных пользователей может «ходить» по сайту по индивидуальному сценарию и иметь личные параметры. Также в процессе тестирования можно имитировать кратковременные пики нагрузки, когда количество посетителей скачкообразно увеличивается, что очень актуально для сайтов с неравномерной аудиторией.

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

Для тестирования необходимо знать:
  • сколько посетителей планируется принимать в среднем, в пиковой нагрузке, время пиковой нагрузки;
  • среднее количество страниц, просматриваемых одним пользователем, есть ли различия в поведении между зарегистрированными и анонимными пользователями, количественное соотношение между такими пользователями;
  • наличие динамических страниц и страниц, изменяемых в течение определенного периода, и как часто это происходит;
  • задействуется ли электронная почта, например, для подтверждения полномочий пользователя;
  • какая еще дополнительная информация используется для проверки статуса пользователя (cookies);
  • требуется ли подтверждение полномочий пользователя сторонней организацией или удаленным сервером (например, номер кредитной карточки), и будет ли представлена информация для тестирования;
  • доступная пропускная способность канала, средняя его ширина для одного пользователя;
  • может ли работа нескольких пользователей вызывать коллизию;
  • используется ли защищенное HTTPS-соединение;
  • используется ли кэширование страниц;
  • плановые технические мероприятия, которые могут повлиять на работу сервера, и время их проведения (синхронизация, архивирование и пр.).
Любой из этих параметров может повлиять на конечный результат. Необязательно все проверки включать в один тест, можно разбить сначала задачу на подзадачи. Например, проверка базовой системы (серверы: веб, приложений, базы данных) и проверка отдельных модулей (сервлеты, скрипты и пр., например, проверка аутентификации при большом количестве пользователей).

Этапы тестирования

1. Разработка моделей нагрузок и проектирование тестовых сценариев.
2. Разработка и отладка тестовых скриптов.
3. Подготовка тестового набора базы данных.
4. Организация и проведение нагрузочных тестов.
5. Проведение анализа результатов тестирования.

Распределение тестирования

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

Результаты, отчеты, графики

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

Заключение

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

Комментариев нет:

Отправить комментарий