Що таке тестування масштабованості? Навчайтеся на прикладі

⚡ Розумний підсумок

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

  • 🔘 Визначення: Нефункціональний тест, який перевіряє, чи система все ще працює прийнятно зі зростанням попиту.
  • ☑️ Два напрямки: Вертикальне масштабування додає потужності одній машині; горизонтальне масштабування додає більше машин за балансиром.
  • Основні показники: Час відгуку, пропускна здатність, використання процесора та пам'яті, а також використання мережі tracпідвищується на кожному кроці навантаження.
  • 🧪 Метод: Навантаження зростає запланованими кроками, доки метрика не перевищить своє порогове значення, яке позначає межу масштабованості.
  • 🛠️ інструменти: JMeter, k6, Gatling, Locust та LoadRunner генерують розподілене навантаження та автоматично записують результати.
  • 📈 Результат: Планування потужностей стає заснованим на доказах, а не на здогадках, завдяки чому релізи переживають піки трафіку.

Що таке тестування масштабованості

Що таке тестування масштабованості?

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

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

Навіщо проводити тестування масштабованості?

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

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

Найлегше уявити цей зв'язок у вигляді кривої: пропускна здатність зростає разом із додатковим навантаженням, доки ресурс не перенасичується, після чого додаткові користувачі лише подовжують чергу.

Тестування масштабованості вимірює продуктивність системи зі збільшенням робочого навантаження

Види тестування масштабованості

Масштабованість не є окремою властивістю, тому план тестування зазвичай охоплює більше одного виміру. Чотири типи, наведені нижче, – це ті, які вимірює більшість команд, а перші два визначають форму самого тестового середовища.

тип Що масштабується Що доводить тест
Вертикальна масштабованість (збільшити масштаб) Процесор, пам'ять або сховище, додані до одного сервера Скільки додаткового навантаження поглинає одна модернізована машина, і де знаходиться одновузлова стеля
Горизонтальна масштабованість (масштабування) Додаткові сервери, контейнери або вузли за балансувальником навантаження Чи зростає пропускна здатність приблизно пропорційно доданим вузлам, чи спільні ресурси обмежують її?
Функціональна масштабованість Нові функції, модулі або послуги Чи можна поглинути додаткову функціональність без погіршення стану існуючих транзакцій
Адміністративна масштабованість Користувачі, орендарі, команди або середовища для керування Чи залишаються працездатними адаптація, дозволи та моніторинг у міру зростання організації

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

Що тестувати в тестуванні масштабованості

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

атрибут Що це вам говорить
Час реакції Час між запитом користувача та відповіддю системи; він має залишатися незмінним, оскільки паралельність зростає
Перехід екрану Як швидко одна сторінка або перегляд поступається місцем наступному під час завантаження
Пропускна здатність Обсяг запитів, оброблених за одиницю часу; плато позначає межу масштабованості
Вимірювання часу Час сеансу, час перезавантаження, час друку, час транзакції та час виконання завдання
Продуктивність порівняно з кількістю користувачів Як змінюється кожна метрика в міру додавання одночасних користувачів поетапно
Запит тарифів Запити за секунду, транзакції за секунду та звернення за секунду
Використання мережі Споживана пропускна здатність та затримка пакетів між рівнями
Використання процесора та пам'яті Вартість ресурсів на транзакцію; постійно зростаюча цифра часто сигналізує про витік
Лічильники веб-сервера Запити та відповіді за секунду, глибина черги та відхилені з'єднання
Продуктивність під навантаженням Комбінована поведінка після того, як усі метрики зчитуються разом у піковому режимі

Стратегія тестування для тестування масштабованості

Стратегія тестування масштабованості відрізняється залежно від типу тестованої програми. Якщо програма звертається до база даних, параметри тестування включатимуть розмір бази даних відносно кількості користувачів тощо.

Передумови для тестування масштабованості

  • Можливість розподілу навантаження — Перевірте, чи дозволяє інструмент для тестування навантаження генерувати навантаження з кількох машин та керувати ним з центральної точки.
  • Operating System — Перевірте, що операційні системи агенти генерації навантаження та головна серверна частина тестування навантаження працюють під керуванням.
  • процесор — Перевірте, який тип процесора потрібен для віртуального агента користувача та головної машини для навантажувального тестування.
  • пам'ять — Перевірте, скільки пам'яті вистачить для віртуального агента користувача та головної системи навантажувального тестування.
  • Тестове середовище — Перевірте, чи тестове середовище достатньо точно відображає виробництво для того, щоб результати можна було перенести.

Як виконати тестування масштабованості

  1. Визначити повторюваний процес для виконання тестів масштабованості протягом життєвого циклу застосунку
  2. Визначте критерії масштабованості
  3. Список програмних засобів, необхідних для запуску навантажувального тесту
  4. Налаштуйте середовище тестування та налаштуйте апаратне забезпечення, необхідне для виконання тестів масштабованості
  5. Плануйте тестові сценарії, а також тести масштабованості
  6. Створення та перевірка сценарію віртуального користувача
  7. Створіть і перевірте сценарії тестування навантаження
  8. Виконайте тести
  9. Оцініть результати
  10. Сформувати необхідні звіти

План перевірки масштабованості

Перш ніж створювати тести, розробіть детальний план тестування. Це важливий крок, щоб переконатися, що тест відповідає вимогам програми.

Нижче наведено атрибути для створення чітко визначеного План тестування для тестування масштабованості.

  • Кроки для сценаріївТестовий скрипт повинен містити детальні кроки, які визначають точні дії, які виконає користувач.
  • Дані часу виконанняПлан тестування має визначати будь-які дані під час виконання, необхідні для взаємодії із застосунком.
  • Тести на основі данихЯкщо скриптам потрібні різні дані під час виконання, вам потрібно розуміти всі поля, для яких ці дані потрібні.

Приклад тестування масштабованості

Розглянемо інтернет-магазин, який очікує 2,000 одночасних покупців під час сезонного розпродажу. Команда спочатку домовляється про критерій успішності: транзакція оформлення замовлення має завершитися менш ніж за три секунди для 95 відсотків користувачів, а рівень помилок має бути нижче одного відсотка.

Потім тест запускає той самий скрипт browse-search-cart-checkout для 250, 500, 1,000, 1,500 та 2,000 віртуальних користувачів. Час відгуку становить близько двох секунд для 1,000 користувачів, зменшується до 2.8 секунди для 1,500 і досягає дев'яти секунд для 2,000, тоді як завантаження процесора бази даних становить 98 відсотків. Таким чином, межа масштабованості становить приблизно 1,500 користувачів, а вузьким місцем є рівень бази даних, а не сервери додатків, які команда планувала додати.

Інструменти тестування масштабованості

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

Інструмент Сценарії Найкраще підходить для
Apache JMeter Плани тестування графічного інтерфейсу та XML, Java заснований Широке охоплення протоколів, включаючи JDBC, JMS, LDAP та SOAP
Графана k6 JavaСценарій або TypeScript Тести API та мікросервісів, підключені до конвеєра CI/CD
Гетлінг Java, Kotlin або Scala DSL Висока кількість віртуальних користувачів на один інжектор з детальними HTML-звітами
сарана одноколірний Python Python команди, яким потрібно розширити клієнт за межі HTTP
LoadRunner C-подібні скрипти, записані у VuGen Великі корпоративні комплекси зі застарілими та пакетними додатками

Хмарні бігуни, такі як BlazeMeter, LoadView та Gatling Enterprise розташовані на основі кількох із цих рушіїв і їх варто розглянути, коли для тестування потрібні десятки тисяч віртуальних користувачів або трафік з кількох географічних регіонів. Ширший огляд цієї категорії доступний у посібнику з засоби тестування продуктивності.

Проблеми та найкращі практики тестування масштабованості

Найбільш невтішні результати масштабованості tracповертаємося до тестової конфігурації, а не до програми. Це проблеми, які повторюються, і звички, які їм запобігають.

Загальні виклики

  • Невеликі середовища — Тестовий стенд з половиною виробничої пам'яті повідомляє про вузьке місце, якого не існує у виробництві.
  • Нереалістичні моделі робочого навантаження — Скрипти без часу на обдумування або варіації даних потрапляють у кеші, які реальні користувачі пропустили б.
  • Шумні результати — Автоматичне масштабування, збирання сміття та спільне хмарне обладнання роблять два однакові запуску несумісними.
  • Тонка спостережуваність — Без показників на стороні сервера повільний результат показує, що щось зламалося, але не що саме.
  • Коштувати — Для створення дуже високого рівня паралельності потрібен власний парк генераторів навантаження, який легко недооцінити.

Кращі практики

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

Тестування масштабованості проти тестування навантаження

Ці два поняття часто плутають, оскільки обидва застосовують навантаження. Різниця полягає в питанні, на яке відповідає кожен з них: тестування масштабованості запитує, наскільки може зростати система, тоді як тестування навантаження запитує, чи справляється воно з очікуваним навантаженням.

Основа Тестування масштабованості Тестування навантаження
Focus Він зосереджений на продуктивності ваших веб-сайтів, програмного забезпечення, апаратного забезпечення та додатків, коли вносяться зміни до розміру або обсягу системи для задоволення зростаючих потреб. Тестування навантаження зосереджено на тестуванні програми під великими навантаженнями, щоб визначити, в який момент відбувається збій часу відгуку системи.
Схема навантаження Навантаження збільшується поетапно, а ресурси можна додавати між кроками. Навантаження утримується на очікуваному піковому рівні протягом фіксованого періоду часу
Відповідь на запитання Як далеко може розвиватися ця система, і що її обмежує? Чи досягає ця система своїх узгоджених цілей сьогодні?
Типовий вихід Обмеження масштабованості, вузьке місце та план обмеження потужностей Прохід або не прохід відповідно до цільових показників часу відгуку та пропускної здатності

Обоє сидять під нефункціональне тестування парасолька поруч стрес-тестування, випробування шипами, випробування на витривалість та об'ємне тестування, а зріла стратегія продуктивності зазвичай запускає кілька з них з одними й тими ж сценаріями.

Поширені запитання

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

Так. Копілот та аналогічні агенти – чернетка. k6 або сценарії Locust, генерувати параметризовані тестові дані та швидко формувати кроки конвеєра CI. Інженер з продуктивності все ще повинен встановлювати реалістичний час обдумування, поєднання робочого навантаження та критерії успішного завершення, оскільки вони залежать від поведінки виробничого процесу.

Масштабованість — це здатність зростати, коли додаються ресурси, незалежно від того, чи це займає хвилини чи місяці. Еластичність — це здатність автоматично додавати та вивільняти ці ресурси в міру зміни попиту, а потім повертатися до меншого розміру.

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

Один офісний комп’ютер не може генерувати десятки тисяч сеансів і не може відтворити затримку, яку відчуває користувач в іншому регіоні. Хмарне тестування постачає генератори навантаження в кількох регіонах на вимогу та відпускає їх після завершення роботи.

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

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

Написання сценаріїв Javaсценарій, Python or Java, практичне знання HTTP та поведінки баз даних, впевнене читання метрик сервера та контейнера, а також достатньо статистичних даних для визначення процентиля від середнього значення. Знайомство з хмарними технологіями та CI/CD стало майже необхідним.

Підсумуйте цей пост за допомогою: