
Навантажувальне тестування мережевої системи: як довести її масштабованість
- Load Testing
- Performance Testing
- Scalability Testing
- System Reliability

Навантажувальне тестування мережевої системи: як довести її масштабованість
Система не стає масштабованою лише тому, що панель показників залишалася зеленою під час одного запрограмованого піка. Масштабованість — це спостережуваний зв’язок між попитом, корисною пропускною здатністю, затримкою, правильністю результатів, вичерпанням ресурсів, вартістю та відновленням. Переконливе навантажувальне випробування показує, де цей зв’язок змінюється, що відмовляє першим, як система обмежує надлишкову роботу і чи повертається служба до стану, якому можна довіряти.
Почніть із рішення щодо робочої системи. Чи витримає платформа рекламну кампанію, перенесення клієнтських організацій, вихід у новий регіон, щоденні підсумкові розрахунки або прогнозоване зростання протягом двох років? Чи потрібно оновлювати базу даних? Яку мінімальну потужність і запас має підтримувати автомасштабування? Назвіть відповідального за рішення, очікуваний трафік, обіцянку користувачеві, вартість відмови, межі випробування та потрібні докази. Вимогу «витримувати 10 000 користувачів» неможливо перевірити, доки не визначено сеанси, дії, інтенсивність надходження, розміри даних, сценарії та ознаки успіху.
Ставтеся до роботи як до контрольованого інженерного експерименту, а не показового обстрілу трафіком. Захистіть справжніх користувачів і сторонні служби, використовуйте дозволені дані, погодьте умови зупинення, спостерігайте за генератором навантаження та збережіть шлях відновлення. Результатом мають стати відтворюваний експеримент, причинне пояснення перших обмежень і безпечний діапазон експлуатації з чіткими припущеннями, а не окрема кількість запитів за секунду без зв’язку з поведінкою.
Визначте успіх до створення навантаження
Визначайте успіх на межі бізнес-результату. Перевірка оформлення покупки має враховувати одне справжнє замовлення, один дозволений платіж, правильний залишок товару й підтвердження, а не лише відповідь HTTP 200. Асинхронне випробування має вимірювати час від надходження події до стійкого бізнес-результату разом із часом очікування в черзі та повторними спробами. Оберіть критичні сценарії й операції, а потім до запуску встановіть пороги завершення, правильності, частоти помилок, p50, p95, p99, пропускної здатності та відновлення.
Середні значення приховують хвіст розподілу та зміни в часі. Дві системи можуть мати однакову середню затримку 300 мс, але одна з них відповідатиме невеликій групі користувачів по десять секунд. Показуйте процентилі для кожної операції як часовий ряд поруч з інтенсивністю надходження, завершеною корисною роботою, помилками й вичерпанням ресурсів. Не вилучайте з розподілу невдалі операції та перевищення часу очікування. Остерігайтеся систематичного пропускання повільних періодів: генератор із замкненим циклом чекає на повільну відповідь і саме в момент перевантаження надсилає менше нових запитів, через що затримка для користувача здається меншою за реальну.
Відрізняйте цільові показники служби від діагностичних порогів. Обіцянка користувачеві може вимагати, щоб p99 оформлень покупки завершувалися менш ніж за три секунди, а частка невдалих результатів була нижчою за 0,2 відсотка. CPU, кількість з’єднань із базою даних, затримка циклу подій або розмір черги пояснюють, чому обіцянка під загрозою, але самі не є обіцянкою. Додайте перевірку цілісності даних, запобігання дублікатам, порядку операцій і фінансового звіряння там, де важлива правильність. Зафіксуйте поріг аварійного припинення, що захищає середовище, не приховуючи невдалого результату.
Побудуйте модель навантаження, схожу на робочу систему
Виводьте навантаження з телеметрії робочої системи, прогнозів і ділового календаря. Опишіть інтенсивність надходження та паралельність, співвідношення запитів і сценаріїв, паузи між діями, повторне використання сеансів, розміри даних, розподіл записів, нерівномірність між клієнтськими організаціями, географію, протоколи, фонові завдання, планові пакети, стан кешу та звернення до сторонніх служб. Окремо змоделюйте звичайний трафік, очікуваний пік, правдоподібний сплеск і зростання. Одна змішана ціль за кількістю запитів на секунду може приховати дорогу операцію, що визначає потужність.
Використовуйте відкриту модель надходження, коли реальний попит не сповільнюється разом із відповідями. Закриту модель застосовуйте, якщо фіксована група користувачів справді чекає перед наступною дією. Додайте нових і постійних користувачів, великі й малі записи, влучання та промахи кешу, часто запитувані ключі, пошук, запис, завантаження файлів і реалістичну автентифікацію. Змінюйте дані, щоб випробування не читало той самий закешований об’єкт. Створіть достатню історію, аби індекси, плани виконання, сховище, розділи й правила зберігання поводилися як у запланованому масштабі.
Збережіть важливі для питання властивості робочої системи: топологію, версії, правила масштабування, розміри екземплярів, обмеження, пули, індекси, мережевий шлях і поведінку залежних служб. Менше середовище здатне дати правильну відповідь, якщо відмінності й межі висновків зазначено явно. Імітуйте сторонню службу, коли не маєте дозволу навантажувати її, а потім окремо відтворіть виміряні затримки, помилки, квоти та відновлення. Ніколи не перетворюйте навантажувальне випробування на несанкціоновану відмову в обслуговуванні.
Перевірте генератор невеликим пробним навантаженням. Спостерігайте за його CPU, пам’яттю, сокетами, мережею, точністю системного часу й пропущеними ітераціями; за потреби розподіліть генерацію між кількома вузлами. Запишіть сценарії, дані, поводження із секретами, налаштування, ідентифікатори розгортань та часові вікна випробувань, щоб інший інженер міг відтворити запуск.
- Базове випробування й перевірка потужності: відтворіть звичайні та очікувані пікові сценарії, щоб визначити процентилі, правильність, вичерпання ресурсів, вартість, запас потужності й точку порівняння для змін.
- Стресове випробування: підвищуйте попит контрольованими кроками до появи першого обмеження на рівні служби або ресурсу, а потім визначте причинне вузьке місце та поведінку відновлення.
- Випробування різкого сплеску: швидко збільште інтенсивність надходження, щоб виміряти виявлення й затримку масштабування, захист черг, бурі з’єднань, відхилення зайвого навантаження, затримку хвоста розподілу та повернення до сталого стану.
- Тривале випробування: утримуйте показовий попит достатньо довго, щоб виявити зміни в пам’яті, сховищі, кеші, пулах, токенах, чергах, журналах і розділах, а також вплив супровідних процесів, яку приховує короткий пік.
Простежуйте операцію від першого запиту до кінцевого результату
Графік затримки на боці клієнта показує, коли користувачі страждають, але не пояснює причини. Пов’язуйте кожну операцію та етап випробування на всьому шляху: зовнішня межа, розподілювач навантаження, шлюз, застосунок, виклики служб, черги, кеші, бази даних, сховища, DNS, ідентифікація та сторонні системи. Використовуйте узгоджений час, версії розгортань, контекст трасування й ідентифікатори випробування. Свідомо налаштуйте вибірку трас під великим навантаженням, щоб спостережуваність не зникала й сама не ставала вузьким місцем.
Спостерігайте попит, корисну пропускну здатність, помилки й вичерпання ресурсів разом. Досліджуйте обмеження CPU, пам’ять та очищення невикористаних об’єктів, затримку циклу подій або пулу потоків, пули з’єднань, сокети й тимчасові порти, розмір і час очікування черги, частку влучань у кеш і витіснення, плани запитів до бази, блокування, запис журналів, дискові операції за секунду, повторне передавання мережею, обмеження частоти й затримку залежностей. Рівний графік CPU не доводить наявності вільної потужності, якщо система чекає на пул, блокування, квоту чи один розділ.
Узгодьте часові шкали, перш ніж робити висновок про причину. Першим симптомом може бути очікування блокування в базі даних, потім вичерпання пулу застосунку, повторні спроби, зростання черги й нарешті перевищення часу очікування на клієнті. Звіт лише про останню помилку підштовхує до хибного виправлення. Позначте на одній шкалі зміни налаштувань, рішення автомасштабування, розгортання, очищення пам’яті, аварійні перемикання та навмисно внесені відмови. Зберігайте початкові метрики й запити разом із підсумками.
Доведіть, як саме працює масштабування, а не лише його наявність
Вертикальне масштабування змінює потужність одного екземпляра, горизонтальне — кількість екземплярів. Перевіряйте обидва як поведінку із затримками, межами та залежностями. Фіксуйте сигнал попиту, вікно виявлення, час підготовки, готовність, розподіл трафіку, паралельність одного екземпляра, правила зменшення масштабу, максимальну потужність і вартість. Служба, яка додає копії вже після порушення SLO через черги, технічно масштабується автоматично, але запізнюється з погляду експлуатації.
Почніть із мінімальної потужності, а потім створіть сплеск, достатній для збільшення масштабу. Переконайтеся, що нові екземпляри справді готові, отримують збалансовану роботу, безпечно прогрівають кеші й не створюють бурі з’єднань. Утримуйте пік, щоб виявити спільні обмеження в базах даних, засобах передавання повідомлень, сховищах, NAT, службах з обмеженою частотою або ключах розділів. Зменште попит і спостерігайте за скороченням: незавершена робота має дійти кінця, тимчасові права на роботу й сеанси — безпечно переміститися, а система — не коливатися між станами.
Перевіряйте нерівномірне навантаження. Одна велика клієнтська організація, часто запитуваний ключ, упорядкований розділ, закріплений сеанс або довге завдання можуть перевантажити частину системи, поки загальні панелі показують справний стан. Порівнюйте завершену корисну роботу й собівартість одиниці на кожному кроці масштабування. Якщо подвоєння копій майже не збільшує пропускну здатність, знайдіть спільне обмеження, перш ніж платити за додаткові обчислення. Визначайте запас потужності за похибкою прогнозу, затримкою масштабування, резервом на випадок відмов і сповільнення залежностей, а не довільним відсотком.
Перевіряйте перевантаження, відмову й відновлення як один сценарій
Потужність без керування перевантаженням крихка. Підніміть попит вище запланованого діапазону й перевірте обмежені черги, межі паралельності, граничний час, автоматичне від’єднання несправних залежностей, кероване відхилення надлишкової роботи, пріоритети та чесні відповіді. Служба має захищати критичну роботу й залежності, а не приймати все й повільно відмовляти. Повторні спроби потребують обмежень, затримки, випадкового розподілу в часі та власного бюджету; синхронні повторення здатні перетворити малу відмову залежності на бурю всієї платформи.
Вносьте по одній контрольованій відмові: сповільніть постачальника, відхиліть з’єднання, вичерпайте пул, приберіть екземпляр, перервіть роботу засобу передавання повідомлень, перемкніть базу даних або обмежте смугу пропускання. Спочатку сформулюйте очікуване погіршення й незмінну умову безпеки. Спостерігайте за виявленням, сповіщенням, відповідальністю, автоматичною реакцією, впливом на користувача та ручним відновленням. Не проводьте руйнівних експериментів без дозволу, обмеження масштабу наслідків, умов аварійного припинення й перевіреного шляху відновлення.
Відновлення — частина випробування. Після усунення попиту або відмови виміряйте час, за який затримка, частота помилок, час очікування в черзі, потужність і вартість повернуться до очікуваного діапазону. Переконайтеся, що черга повторних спроб поступово спорожнюється, а не знову розпалює перевантаження; кеші й пули відновлюються; робота не втрачається й не дублюється; замовлення, баланси та інші контрольні підсумки збігаються; тимчасові ресурси зникають. Система, що пережила пік, але потребує кількох годин ручного прибирання, випробування не пройшла.
Усуньте одне вузьке місце й відтворіть той самий експеримент
Діагностуйте перше причинне обмеження, а не найгучнішу метрику. Сформулюйте гіпотезу, внесіть одну контрольовану зміну й повторіть те саме навантаження з тими самими версіями, даними, топологією та станом кешу. Корисною зміною може бути виправлення запиту або індексу, зменшення кількості мережевих звернень, обмежений поділ на сторінки, пакетне виконання, розмір пулу з’єднань, межі паралельності, чітка відповідальність за кеш, асинхронна робота, виправлення розподілу даних, налаштування середовища або правил масштабування. Зміна п’яти змінних може дати кращий графік, але слабкий висновок.
Порівнюйте часові шкали й довірчі інтервали, а не знімки екрана. Перевірте, чи зросла пропускна здатність, чи залишаються обмеженими затримка хвоста розподілу й помилки, чи перемістилося вузьке місце за прогнозом, чи поліпшилося відновлення, чи правильні дані та чи прийнятна вартість успішного результату. Локальне поліпшення може перенести вичерпання ресурсів до залежності або поліпшити медіану, погіршивши p99. Зберігайте невдалі експерименти й відхилені пояснення в журналі рішень.
Перетворіть стабільні випробування на багаторівневу програму регресійних перевірок. Запускайте малий пробний сценарій після відповідних розгортань, відтворюване базове випробування за розкладом або перед випуском, глибші стресові й тривалі випробування перед істотними змінами потужності та контрольовані перевірки робочої системи там, де це дозволено. Уточнюйте навантаження за телеметрією в міру зміни поведінки користувачів, даних, архітектури й залежностей. Докази швидкодії мають строк придатності.
Навантажувальне випробування стає доказом потужності лише тоді, коли його попит, дані, середовище, пороги, телеметрію, поведінку за відмови й відновлення можна пояснити та відтворити. Велике число без цих умов — лише вистава.— GARNO.TECH Engineering Team
Обирайте партнера за доказами, які залишаться після роботи
Партнер із навантажувального тестування має поліпшити рішення, які команда зможе ухвалювати після співпраці. Запитайте, як він виводить навантаження з даних робочої системи, запобігає систематичному пропусканню повільних періодів, готує показові дані, захищає середовище й сторонні служби, перевіряє генератор, оснащує вимірюваннями весь шлях, відрізняє кореляцію від причини та перевіряє відновлення й правильність. Сертифікати на інструменти й велика кількість запитів на ці питання не відповідають.
Перегляньте приклад результату роботи. Він має містити рішення й гіпотезу, обсяг і винятки, відмінності середовища, версії та налаштування, модель даних і навантаження, сценарії, пороги, часову шкалу, місця збереження первинних результатів, зведені процентилі, результати, вичерпання ресурсів, причинний аналіз, висновки про відновлення й цілісність, обмеження, пріоритетні виправлення, вплив на вартість і безпечний діапазон експлуатації. Інший інженер має бути здатен відтворити запуск.
До початку уточніть доступ, чутливі дані, дозвіл на випробування, хмарні витрати, межі сторонніх служб, відповідальність за інциденти, права на вихідні матеріали й передавання знань. Внутрішні інженери мають брати участь у моделюванні, спостереженні, діагностиці й повторних запусках. Найкраща співпраця залишає підтримувані сценарії, панелі показників, запити, інструкції, рішення та людей, здатних оновлювати докази без постійної залежності.
Публікуйте безпечний діапазон експлуатації, а не позначку «пройдено»
Підсумкове твердження має бути умовним і корисним: за визначеної версії, топології, розподілу даних, стану кешу, характеру залежностей і навантаження система витримувала задану інтенсивність надходження протягом заданого часу, виконуючи пороги бізнес-результату, затримки, помилок, цілісності, відновлення й вартості. Назвіть перше обмеження, запас потужності, затримку масштабування, поведінку за відмови й умови, за яких результат утрачає чинність.
Перетворіть докази на дії. Визначте межі потужності й автомасштабування, панелі та сповіщення, передпускові перевірки, сигнали зростання, бюджети залежностей, межі накопиченої роботи й дату або зміну, після якої потрібне повторне випробування. Упорядкуйте виправлення за ризиком для бізнесу та доведеним обмеженням. Не починайте дороге переписування, якщо результат визначає один індекс, пул, правило повторних спроб або розділ; не обмежуйтеся поверхневим налаштуванням, якщо архітектура не здатна відхиляти зайве навантаження чи безпечно відновлюватися.
GARNO.TECH проєктує відтворювані експерименти зі швидкодією, простежує вузькі місця на шляхах застосунку й мережі, перевіряє масштабування та відновлення й передає сценарії та експлуатаційні знання внутрішнім командам. Дізнайтеся більше про наші послуги з навантажувального тестування мережі, якщо перед запуском, міграцією, прогнозованим зростанням або через повторюваний симптом робочої системи потрібні докази потужності, а не заспокійливі слова.
- /01Сформулюйте рішення та модель навантаженняВизначте рішення щодо робочої системи, критичні результати, модель інтенсивності надходження й паралельності, співвідношення сценаріїв, розподіл даних, піки, фонову роботу, пороги SLO, умови зупинення та відповідального.
- /02Забезпечте повторюваність умовЗафіксуйте версії, топологію, обмеження, масштабування, дані, стан кешу, мережевий шлях, поведінку залежностей, потужність генератора, дозволи, засоби захисту та всі істотні відмінності від робочої системи.
- /03Запустіть випробування й зіставте весь шляхСтворіть контрольовані етапи та поєднайте на одній часовій шкалі бізнес-результати, процентилі, помилки, пропускну здатність, рішення масштабування, пули, черги, середовище виконання, бази даних, сховища, мережу й залежності.
- /04Знайдіть межу й перевірте відновленняПіднімайте попит до першого причинного обмеження, перевірте керування перевантаженням і цілісність, приберіть тиск, виміряйте відновлення, внесіть одну зміну, повторіть ті самі умови й опублікуйте безпечний діапазон експлуатації.
import http from 'k6/http';
import { check } from 'k6';
export const options = {
scenarios: {
checkout: {
executor: 'ramping-arrival-rate',
startRate: 10,
timeUnit: '1s',
preAllocatedVUs: 80,
maxVUs: 400,
stages: [
{ target: 50, duration: '3m' },
{ target: 150, duration: '7m' },
{ target: 150, duration: '15m' },
{ target: 0, duration: '3m' },
],
gracefulStop: '2m',
},
},
thresholds: {
http_req_failed: ['rate<0.002'],
'http_req_duration{operation:checkout}': ['p(95)<800', 'p(99)<1500'],
checks: ['rate>0.998'],
dropped_iterations: ['count==0'],
},
};
export default function () {
const response = http.post(
'https://test.example.com/api/checkout',
JSON.stringify({ sku: 'sku-42', quantity: 1 }),
{
headers: { 'Content-Type': 'application/json' },
tags: { operation: 'checkout' },
timeout: '5s',
},
);
check(response, {
'one order was accepted': (res) => res.status === 201 && Boolean(res.json('orderId')),
});
}Чому середнього часу відповіді недостатньо в навантажувальному тестуванні?
Наші дослідження
Дослідження та розробка рішень на основі штучного інтелекту для оптимізації бізнес-процесів і підвищення ефективності прийняття рішень.
Аналіз моделей машинного навчання для прогнозної аналітики у фінансовій сфері, електронній комерції та SaaS-платформах.
Дослідження технологій обробки природної мови та комп'ютерного зору для посилення автоматизації, персоналізації та підтримки клієнтів.


