Під граничним навантаженням огляд програм навантажувального тестування веб-серверів

Здаючи веб-сервер в повсякденну експлуатацію, потрібно бути впевненим, що він
витримає плановану навантаження. Тільки створивши умови, наближені до бойових,
можна оцінити, чи достатня потужність системи, правильно встановлені такі
додатки, які беруть участь у створенні веб-контенту, і інші чинники, що впливають на
роботу веб-сервера. У цій ситуації на допомогу прийдуть спеціальні інструменти,
які допоможуть дати якісну і кількісну оцінку роботи як
веб-вузла в цілому, так і окремих його компонентів.

Все йде за планом

Перш ніж кидатися в бій, спочатку слід розібратися, що ми хочемо
отримати в результаті тестування. Адже перевірка, як і будь-яка інша робота,
вимагає попередньої підготовки. При неправильно сформульованої задачі
можуть вийти результати, які будуть в повному обсязі відображати реальне
стан справ. Виходячи з передбачуваного навантаження веб-сервера, необхідно
визначитися з критеріями випробування. Встановити, що буде вважатися як успіх,
а що як неприйнятна робота сервісу (наприклад, час відповіді, завантаження
сервера). Розрізняють три варіанти тесту:

  • Навантажувальний (Load-testing) - визначається працездатність системи
    при деякій суворо заданої заздалегідь (планованої, робочої) навантаженні.
  • Стійкості (Stress) - застосовується для перевірки параметрів системи
    в анормальних та екстремальних умовах, основне завдання під час цього тесту -
    спробувати порушити роботу системи. Дозволяє визначити мінімально
    необхідні величини системних ресурсів для роботи програми, оцінити
    граничні можливості системи і фактори, що обмежують ці можливості.
    Також визначається здатність системи до збереження цілісності даних при
    виникненні позаштатних аварійних ситуацій.
  • Продуктивності (Performance) - комплексна перевірка, що включає
    попередні два тести, призначена для оцінки всіх показників системи.

Результат тесту - максимальне число користувачів. які можуть
одночасно отримати доступ до веб-вузла, число запитів, що обробляються
додатком, або час відповіді сервера. Грунтуючись на отриманому результаті,
веб-майстер і мережевий адміністратор (в роботі сервера беруть участь і інші
компоненти мережі, маршрутизатори, брандмауер, кешуючий і проксі-сервер, база
даних та ін.) зможуть заздалегідь виявити вузькі місця, що виникають із-за
незбалансованої роботи компонентів, і виправити ситуацію, перед тим як
включати систему в реальну роботу.

Під час тестування імітується одночасна робота декількох сотень
або тисяч відвідувачів. Для більшої правдивості кожен з віртуальних
користувачів може «ходити» по сайту за індивідуальним сценарієм і мати особисті
параметри. Також в процесі тестування можна імітувати короткочасні піки
навантаження, коли кількість відвідувачів стрибкоподібно збільшується, що дуже
актуально для сайтів з нерівномірною аудиторією. Отже, щоб повноцінно провести
тестування, необхідно знати:

Будь-який з цих параметрів може вплинути на кінцевий результат. Не обов'язково
всі перевірки включати в один тест, можна розбити спочатку задачу на підзадачі.
Наприклад, перевірка базової системи (сервери: веб, додатків, бази даних) і
перевірка окремих модулів (сервлети, скрипти та ін. наприклад, перевірка
аутентифікації при великій кількості користувачів). В результаті при
тестуванні видаються графіки трьох видів: лінійний, нелінійний і насичення. В
першому випадку при зростанні навантаження час відгуку (тобто обробки) залишається
постійним. При подальшому збільшенні навантаження час відгуку також збільшується
(Майже лінійно), і, нарешті, настає ситуація, подібна DOS-атаки, коли час
відгуку нескінченно збільшується. Тепер, коли план дій готовий, переходимо до
короткому огляду утиліт, які допоможуть його втілити. Почнемо з безкоштовних.

Open Systems Testing Architecture

Apache JMeter

Apache JMeter (jakarta.apache.org/jmeter)
є Java-додатком з відкритим кодом, призначений для навантажувального
тестування не тільки веб-додатків і їх окремих компонентів (скрипти,
сервлети, Java об'єкти і ін.), але також FTP-серверів, баз даних (з
використанням JDBC) і мережі. Функціональність розширюється за допомогою плагінів.
Підтримується SSL (через Java Secure Sockets Extension). можливе проведення
тестів як з використанням графічного інтерфейсу, так і з командного рядка.
Використання Java на увазі кроссплатформенность, тому JMeter
впевнено працює в різних * nix-системах, в Windows від 98 і деяких інших
ОС. Поширюється під Apache License.

Для роботи досить запустити ApacheJMeter.jar або в консолі jmeter.bat
(Windows) або jmeter.sh (* nix).

JMeter має вбудований проксі-сервер, який призначений для запису
сесій, але можна використовувати і зовнішній. Перед початком тестування необхідно
скласти тестовий план, що описує серію завдань, які необхідно виконати
JMeter. Він повинен містити одну або кілька груп потоків (Thread
Groups) і інші елементи:

  • Логічні контролери (Logic controllers);
  • Типові контролери (Sample generating controllers);
  • Слухачі (Listeners);
  • Таймери (Timers);
  • Відповідності (Assertions);
  • Конфігураційні елементи (Configuration elements).

Безкоштовні продукти, на жаль, закінчилися, тепер парочка комерційних рішень.

WAPT - Web Application Testing

WAPT (www.loadtestingtool.com)
дозволяє випробувати стійкість веб-сайту та інших додатків, що використовують
веб-інтерфейс, до реальних навантажень. Розробляється новосибірської компанією
SoftLogica LLC. Це одна з найпростіших у використанні програм огляду. для
проведення простого тесту навіть не потрібно заглядати в документацію, інтерфейс
простий, але не локалізований. Працює під управлінням Windows від 98, підтримується
і Vista. Для перевірки WAPT може створювати безліч віртуальних
користувачів, кожен з індивідуальними параметрами. підтримується кілька
видів аутентифікації і куки. Сценарій дозволяє змінювати затримки між
запитами і динамічно генерувати деякі випробувальні параметри,
максимально імітуючи таким чином поведінку реальних користувачів. У запит
можуть бути підставлені різні варіанти HTTP-заголовка, в налаштуваннях можна
вказати кодування сторінок. Параметри User-Agent, X-Forwarded-For, IP вказуються
в настройках сценарію. Значення параметрів запиту можуть бути розраховані
декількома способами, в тому числі, визначені відповіддю сервера на попередній
запит, використовуючи змінні і функції. Підтримується робота по захищеному
протоколу HTTPS (і всі типи проксі-серверів). Створені сценарії, які зберігаються в
файлі XML-формату, можна використовувати повторно. Крім стандартних Performance і
Stress, в списку присутні кілька інших тестів, що дозволяють визначити
максимальну кількість користувачів і тестувати сервер під навантаженням в
Протягом довгого періоду.

За допомогою NeoLoad можна проводити і розподілені тести. Один з
комп'ютерів є контролером, на інші встановлюються генератори
навантаження (loadGenerator). Контролер розподіляє навантаження між loadGenerator і
збирає статистику.

Сценарій майбутнього тесту створити дуже просто. Запускаємо програму (при
першому запуску буде потрібно ввести реєстраційний ключ, 30-денна версія після
реєстрації буде надіслано поштою), вибираємо New Project, вводимо назву
проекту. Після цього буде показана невелика підказка з приводу подальших
дій, натискання Start Recording запустить веб-браузер, всі переміщення будуть
записані. Після закінчення натискаємо Stop Recording або закриваємо браузер.
Запускається майстер, який допоможе створити віртуальних користувачів і
справить автоматичний пошук динамічних параметрів в записаних сторінках,
виставить середнє значення thinktime. Компоненти сторінки (HTML, images, CSS)
зберігаються окремо. Для отримання результату потрібно пройти три етапи:

  • Design - настройка проекту, тут три вкладки. У Repository вказуються
    веб-сторінки і параметри запитів, в Virtual User створюються віртуальні
    користувачі, вказуються URL, які вони повинні "відвідати", і додаткові
    умови з лівої вкладки поля Actions. У Populations - завдання кожної з груп
    користувачів. У Actions можуть бути обрані наступні дії: Delay
    (Установка затримки), Loop (повтор запиту), While (цикл), If ... Then ... Else
    (Умова), Container і Random Container (групові дії), Try ... Catch
    (Обробка помилок), Stop virtual user (зупинка роботи віртуального
    користувача).
  • Runtime - вказуються параметри тесту, проводиться тест. Тут же в
    окремих вкладках по ходу проведення тесту виводиться статистика.
  • Results - відповідає за виведення різної статистики у вигляді таблиць і графіків.

Причому крім загальних значень, за допомогою системи фільтрів можна відібрати
інформацію з будь-якого параметру. При бажанні проект зберігається для повторного
використання. Серед представлених продуктів можливість порівняння результатів
тесту є тільки у NeoLoad.

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

Продукти від Microsoft

Корпорація Microsoft пропонує цілих два продукти, що дозволяють
протестувати веб-сервер під навантаженням. Це Microsoft Application Stress
Tool і Web Capacity Analysis Tool. Перший поширюється як
окремий продукт і має графічний інтерфейс. Другий входить до складу
комплекту інструментів Internet Information Services 6.0 Resource Kit Tools,
працює з командного рядка. MAST більш наочний, в створенні тесту
допоможе простий майстер створення тестів, можлива робота з cookies, регулювання
навантаження за різними URL. Сценарій тестування може бути створений вручну або
записаний за допомогою веб-браузера та при необхідності відредагований. У WAST
рівень навантаження (stress level) регулюється шляхом завдання кількості ниток,
здійснюють запити до сервера, а число віртуальних користувачів
розраховується як добуток кількості ниток на число гнізд, відкритих кожної з
ниток. Після закінчення тесту отримуємо простий звіт в текстовій формі, в якому
дана інформація по числу оброблюваних запитів в одиницю часу, середнього
часу затримки, швидкості передачі даних на сервер і з сервера, кількістю
помилок і т.д. Звіт можна експортувати в CSV-файл. Ніяких можливостей по
статистичній обробці не передбачено, тобто з його допомогою можна тільки
оцінити роботу за певних умов.

Покажи цю статтю друзям:

Amazon оновив панель управління, щоб попереджати адміністраторів про невірну налаштування Бакета S3

У USB-стек ядра Linux виявлені кілька десятків вразливостей

У клавіатурах MantisTek виявили кейлогерам, що передає дані в Китай

Випадкова активація бага в Ethereum-гаманці Parity заблокувала $ 280 000 000

Схожі статті