vyvchy
    Теми розділу

    10 · Performance testing

    Модель навантаження: профіль, сценарії, think time

    Зміст

    Бізнес каже: «у нас 50 тисяч користувачів на день, перевір, чи витримаємо». Інженер ставить в інструменті 50 000 — і кладе стенд ще на етапі наростання. Обидва впевнені, що говорять про одне й те саме навантаження, хоча між цими числами буває різниця в десятки разів у будь-який бік.

    Модель навантаження — це переклад із мови бізнесу («стільки-то користувачів на день») на мову тесту («стільки-то транзакцій за одиницю часу, у такому міксі, з такими паузами, у такій формі розподілу»). Помилка в моделі підступна тим, що не дає червоного тесту: прогін зелений, звіт красивий, а прод лягає на реальному піку. Тому тема й показова: види тестів назве кожен, а профіль побудує не кожен.

    Операційний профіль: хто що робить і як інтенсивно

    (operational profile) — фактичний або передбачений патерн використання компонента чи системи. Операційні профілі специфікують окремі патерни взаємодії із застосунком — від користувачів або від інших його компонентів; для одного застосунку їх може бути кілька, і саме їхньою комбінацією дістають потрібний .

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

    Джерела даних канон називає поіменно, і їх три: інтервʼю або воркшопи зі стейкхолдерами (власники продукту, менеджери з продажів, кінцеві користувачі); дані про використання схожих застосунків, причому доступ до автоматично зібраних даних — наприклад, з адмінки — рекомендований; спостереження за поведінкою користувачів на визначених задачах. Те саме для практики формулює k6: скористайтеся власними аналітикою й засобами моніторингу, щоб знайти типові патерни трафіку. Сюди ж належать логи й системи класу APM (application performance management) — так заведено називати інструменти моніторингу й керування продуктивністю та доступністю застосунків, хоча вендоронезалежного означення в терміна немає. Тут вони цікаві лише як постачальник чисел, а сам термін розбирає окрема глава про моніторинг.

    Дві настанови, які економлять тижні. Згори вниз: спершу прості широкі профілі, деталізація — лише тоді, коли інакше не досягти цілей тесту. І рецензія: профілі уточнюють зі стейкхолдерами до того, як з них роблять навантаження — захист від найдорожчої помилки, «ми чесно виміряли не те». Ще одне: навантаження не завжди накладає користувач — нічні пакетні й обмін між системами теж мають свої профілі.

    Профіль навантаження: чотири складники

    Профіль навантаження (load profile) специфікує активність, якої компонент або система під тестом може зазнати на проді, і складається з визначеної кількості екземплярів, що виконують дії заздалегідь заданих операційних профілів протягом заданого періоду. Коли екземпляри є користувачами, їх зазвичай називають віртуальними користувачами (virtual users). Глосарій формулює те саме як документ: документація, що визначає задану кількість віртуальних користувачів, які обробляють визначений набір за заданий період часу.

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

    Щоб профіль вийшов реалістичним і відтворюваним, потрібні чотири речі:

    1. Ціль перф-тесту — наприклад, оцінити поведінку під стресовим навантаженням.
    2. Операційні профілі, що точно відображають індивідуальні патерни використання.
    3. Відомі проблеми пропускної здатності й конкурентності (concurrency).
    4. Кількість і розподіл у часі, з якими профілі виконуватимуться, щоб система зазнала бажаного навантаження.

    Зверніть увагу на порядок: ціль стоїть першою. Профіль під питання «чи витримаємо Чорну пʼятницю» і профіль під питання «де вузьке місце» різні, навіть якщо система та сама. Звідки беруться самі цілі й пороги — тема глави Вимоги до продуктивності: NFR, SLA, SLO, SLI.

    кількість користувачів

    швидкість приходу

    Аналітика, логи, моніторинг,
    інтервʼю зі стейкхолдерами

    Операційні профілі:
    хто що робить і як інтенсивно

    Профіль навантаження, він же сценарій:
    скільки екземплярів і як розподілені в часі

    Що фіксуємо

    Закрита модель

    Відкрита модель

    кількість користувачів

    швидкість приходу

    Аналітика, логи, моніторинг,
    інтервʼю зі стейкхолдерами

    Операційні профілі:
    хто що робить і як інтенсивно

    Профіль навантаження, він же сценарій:
    скільки екземплярів і як розподілені в часі

    Що фіксуємо

    Закрита модель

    Відкрита модель

    Піки, сезонність і мікс сценаріїв

    Четвертий складник — розподіл у часі — має чотири канонічні форми:

    ФормаЩо це означає
    Ramp-upsрівномірно зростальне навантаження — наприклад, додавати одного віртуального користувача за хвилину
    Ramp-downsрівномірно спадне навантаження
    Stepsмиттєві зміни навантаження — наприклад, додавати 100 віртуальних користувачів кожні пʼять хвилин
    Заздалегідь визначені розподілиобсяг наслідує денні або сезонні бізнес-цикли

    Остання форма і є канонічною відповіддю на питання про піки й сезонність: передбачуваний цикл моделюють розподілом усередині профілю, а не окремим видом тесту. Чорна пʼятниця — це насамперед профіль, форма якого повторює бізнес-цикл, а не «замість load-тесту зробимо стрес». Раптовий короткий сплеск на її старті — інший предмет і тема глави Види performance-тестів: load, stress, spike, soak.

    Мікс сценаріїв канон показує на прикладі складеного профілю: згори — східчастий увід 100 віртуальних користувачів, які виконують активності операційного профілю 1 протягом усього тесту (типово для фонового навантаження), а середня діаграма — наростання до 220 користувачів, яке тримається дві години й потім спадає. Разом вони дають системі близько трьох годин стресу. Висновок: фонове навантаження — окремий сценарій зі своїм профілем, а не «додамо ще користувачів у той самий».

    Інструментально мікс виглядає так само: у k6 в одному скрипті оголошують кілька сценаріїв, кожен виконує свою функцію й має власний патерн планування віртуальних користувачів та ітерацій, який забезпечує спеціалізований екзекʼютор. Сценарії йдуть паралельно, а послідовними їх роблять виставленням часу старту; власні змінні середовища й теги метрик у кожного дають гранульований аналіз — у звіті видно, який шматок міксу деградував.

    І застереження проти надмірності від тієї ж доки: тримайтеся простих патернів — для всіх видів тесту достатньо напрямків «наростання, плато, спадання». «Американські гірки», де навантаження зростає й падає кілька разів, марнують ресурси й ускладнюють ізоляцію проблем: результати мають бути порівнюваними.

    Час на роздуми: пауза, що змінює навантаження

    (think time) — кількість часу, потрібна користувачеві, щоб визначити й виконати наступну дію в послідовності дій. У сценарії це пауза, яку симулюють, щоб він не перетворився на чергу запитів без проміжків: симульовані транзакції можуть включати час на роздуми, щоб краще відображати таймінг реального користувача, який, наприклад, натискає кнопку «SEND».

    Через це плутають дві речі. Перша — межа виміру: (response time) транзакції плюс час на роздуми дорівнює загальному часу цієї транзакції. Пауза не входить у час відповіді, і в звіті це два різні рядки (самі величини — глава Метрики: response time, throughput, перцентилі).

    Друга — вплив на навантаження. Моделювання робочого навантаження зазвичай роблять через кількість віртуальних користувачів (потоків виконання) і час на роздуми, і пауза входить у канонічну формулу пропускної здатності системи (system ) прямо:

    Пропускна здатність системи = [кількість віртуальних користувачів] / ([час обробки] + [час на роздуми]).

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

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

    Темп ітерацій (pacing): поняття без канону

    (pacing) — пауза, яку віртуальний користувач витримує після завершення транзакції або сесії, щоб досягти певної частоти транзакцій. Різниця з часом на роздуми — у місці паузи: think time стоїть між діями всередині сценарію й відповідає за реалістичність, темп стоїть після транзакції й керує частотою, тобто самим навантаженням.

    Одразу застереження, яке варто знати на співбесіді: вендоронезалежного канону в цього терміна немає. Силабус CT-PT поняття не вводить — він говорить лише про час на роздуми. Означення дають довідки інструментів, і кожна описує власну реалізацію. У Silk Performer це pacing wait time: пауза додається до часу транзакції, сума двох дає цільовий час сесії (задають одне з двох, друге виводиться), а коли сервер сповільнюється, інструмент сам зменшує паузи, щоб тримати час сесії сталим. Gatling подає темп як окремий тип паузи в DSL: дія виконуватиметься раз на 5 секунд незалежно від пауз усередині.

    JMeter описує той самий механізм, не називаючи його pacing: його таймер вводить змінні паузи, обчислені так, щоб тримати загальну пропускну здатність у семплах за хвилину якомога ближче до заданої цифри — і одразу називає межу: цифра буде нижчою, якщо сервер не здатен її обробити. Найважливіша деталь налаштування — база розрахунку: ціль можна тримати на кожному потоці окремо (тоді сумарне навантаження пропорційне кількості потоків), ділити між потоками групи або між потоками всіх груп плану. Та сама цифра «100 за хвилину» дає при цьому різне сумарне навантаження.

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

    Наростання і спадання: як уводять навантаження

    Наростання (ramp-up) — техніка збільшення навантаження на систему вимірюваним і контрольованим способом; спадання (ramp-down) — дзеркальна техніка зменшення. Сусідня форма, Steps, наростанням не є: наростання рівномірне, кроки стрибкові.

    Механіку з числами дає дока JMeter: період наростання каже, скільки часу взяти, щоб вийти на повну кількість обраних потоків. 10 потоків і період 100 секунд означають, що кожен потік стартує через 10 секунд після попереднього.

    Найцінніше тут — критерій довжини, і він двобічний: наростання має бути достатньо довгим, щоб уникнути завеликого навантаження на старті тесту, і достатньо коротким, щоб останні потоки почали працювати до того, як завершать роботу перші (якщо тільки ви не хочете, щоб сталося саме так). Порушення нижньої межі дає незапланований удар; порушення верхньої — прогін, у якому повного навантаження не було ніколи. Стартова евристика теж названа: почніть із періоду, що дорівнює кількості потоків.

    Наслідок для звіту: метрики фази наростання не змішують із метриками плато — на ній навантаження ще не цільове, а розігрів (холодні кеші, ) дає нетипові часи відповіді. Спадання теж не формальність: саме на ньому видно, чи система повертається до нормального часу відповіді.

    Відкрита і закрита моделі

    Найдорожче рішення в моделі навантаження вкладається в одне речення: у закритій моделі (closed model) ітерація віртуального користувача починається лише тоді, коли завершилася попередня; у відкритій (open model) — нові користувачі приходять незалежно від завершення попередніх ітерацій. Різні моделі пасують різним цілям тесту.

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

    Арифметика закритої моделі проста й неприємна. Приклад із доки k6: запит виконується приблизно 6 секунд, тож нові ітерації стартують із частотою одна на 6 секунд, і за хвилину виходить 10 завершених ітерацій. Швидкість старту нових ітерацій жорстко звʼязана з тривалістю ітерації — а отже, з часом відповіді системи.

    Наслідок отруйний: повільніші відповіді означають довші ітерації й нижчу швидкість приходу нових. Коли система під стресом починає гальмувати, тест на закритій моделі слухняно чекає — і сам зменшує навантаження рівно тоді, коли треба тиснути. У частині тестувальної літератури цю проблему звуть coordinated omission. Для цілей «симулювати певну швидкість приходу» або «певну пропускну здатність» закрита модель не годиться.

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

    Екзекʼютор k6Що задано
    constant-vusфіксована кількість користувачів виконує стільки ітерацій, скільки встигне, за заданий час
    ramping-vusте саме зі змінною кількістю користувачів
    constant-arrival-rateфіксована кількість ітерацій виконується за заданий період
    ramping-arrival-rateзмінна кількість ітерацій за заданий період

    Різниця між ramping-vus і ramping-arrival-rate — не деталь синтаксису: перший нарощує користувачів, другий — частоту запитів, і за однакового графіка це два різні тести.

    Той самий аргумент лунає з боку JMeter: його точний таймер моделює пуасонівський розклад приходу, що часто трапляється в реальному житті й тому має сенс для , — а дока прямо радить у багатьох випадках брати групу потоків відкритої моделі. Самі інструменти — глава Інструменти навантаження: JMeter, k6, Gatling.

    Відкрита модель

    Заданий графік приходу

    Нова ітерація стартує за розкладом

    Ітерації накладаються,
    якщо система гальмує

    Закрита модель

    Вільний віртуальний користувач

    Ітерація

    Відповідь отримано

    Відкрита модель

    Заданий графік приходу

    Нова ітерація стартує за розкладом

    Ітерації накладаються,
    якщо система гальмує

    Закрита модель

    Вільний віртуальний користувач

    Ітерація

    Відповідь отримано

    Правило просте: вимога в запитах за секунду потребує відкритої моделі, вимога в одночасних користувачах — нормальний випадок для закритої. І перше питання до будь-якого чужого перф-звіту: яка була модель?

    Пастка: 1000 користувачів ≠ 1000 одночасних запитів

    Пастка тримається на двох речах: на тому, чим міряють навантаження, і на моделі.

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

    Друга половина пастки — те, що віртуальний користувач не є людиною. Це симуляція активностей, що виконуються згідно з операційним профілем; в інструменті вона реалізована потоком: у JMeter кожен потік виконує план тесту цілком і незалежно від інших, а кілька потоків використовують саме для того, щоб симулювати одночасні зʼєднання. І в закритій моделі один такий потік дає не один запит за секунду, а один запит за час відповіді плюс паузи.

    Підставимо в канонічну формулу. Тисяча віртуальних користувачів, час обробки 200 мс, пауза 1 секунда — це близько 830 запитів за секунду. Та сама тисяча з тим самим часом обробки, але паузою в хвилину — менш ніж 17. Одне число «1000» описує два тести з різницею в пʼятдесят разів, і жоден із них не є «тисячею одночасних запитів».

    Є й третій шар: середнє ховає миттєве навантаження — навіть «запитів за секунду» неявно агрегує дані за вікном виміру. Система з 200 запитами/с у парні секунди і нулем у решті має те саме середнє, що й стала сотня, але вдвічі більший миттєвий пік.

    Тож перед тим як називати число віртуальних користувачів, потрібні профіль (що вони роблять), паузи (як часто) і модель (що зафіксовано). Число без цих трьох речей — не специфікація тесту, а налаштування інструмента.

    Типові помилки

    • «У продукті 50 тисяч зареєстрованих — ставимо 50 000 віртуальних користувачів» → виглядає як реалістичний масштаб, а насправді зареєстровані, активні за день і одночасні — три різні числа, і без профілю жодне не задає навантаження.
    • «Вимога — 500 запитів за секунду, тому беремо 500 користувачів» → виглядає як переклад один-в-один, а насправді в закритій моделі частоту визначає час відповіді: щойно система пригальмує, тест сам зменшить навантаження.
    • «Поставили паузу в кінці сценарію» → виглядає як пауза після транзакції, а насправді в JMeter таймери обробляються перед кожним семплером своєї області дії, тож пауза спрацює на початку наступної ітерації. Щоб дістати паузу після кроку, таймер вішають на наступний семплер або на елемент керування потоком.
    • «Ціль темпу — 100 транзакцій за хвилину» → виглядає як однозначне число, а насправді воно означає різне залежно від бази розрахунку: «на кожен потік» множить сумарне навантаження на кількість потоків, «на групу» ділить ціль між ними.
    • «Сезонний пік перевіримо окремим стрес-тестом» → виглядає як розумний поділ, а насправді сезонність — це форма розподілу всередині профілю; окремим тестом перевіряють раптовий сплеск, а не очікуваний річний цикл.

    Підсумок

    • Профіль будується з даних, а не з уяви: стейкхолдери, дані про схожі застосунки, спостереження за користувачами, аналітика й моніторинг прода. Починають грубо й погоджують профіль до прогону.
    • Профіль навантаження — це чотири складники, і ціль тесту серед них перша, а не кількість користувачів.
    • Передбачуваний сезонний цикл — форма розподілу, а не окремий вид тесту. Фонове навантаження закладають окремим сценарієм, форму профілю тримають простою.
    • Модель важливіша за число. У закритій час відповіді керує навантаженням самого тесту (coordinated omission), у відкритій — ні; вимога в запитах за секунду потребує відкритої.
    • Кількість віртуальних користувачів навантаження не задає — його задає пропускна здатність. Число має сенс лише в парі з профілем, паузами й моделлю.

    Можливі питання

    • «Звідки ви візьмете профіль навантаження для нової системи?» — перевіряють, чи не почнете ви з числа. Сильна відповідь називає джерела даних і погодження профілю до прогону.
    • «Чим відкрита модель відрізняється від закритої і коли яку брати?» — питання на механізм, а не на терміни. Очікують: у закритій нова ітерація чекає на завершення попередньої, тож час відповіді керує навантаженням; вимогу в RPS тримає лише відкрита. Бонус — назва coordinated omission.
    • «У нас 1000 користувачів. Скільки це запитів за секунду?» — питання-пастка. Правильна реакція — попросити профіль і паузи, а тоді показати арифметику.
    • «Чим pacing відрізняється від think time?» — перевіряють акуратність із термінами: різниця в місці паузи й у тому, чим вона керує. Зрілий кандидат додає, що канонічного означення в pacing немає — його дають довідки інструментів.
    • «Як ви оберете період наростання?» — очікують двобічний критерій і те, що метрики наростання не змішують із метриками плато.

    Джерела

    Операційний профіль: хто що робить і як інтенсивно

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.3: означення операційного профілю, три кроки побудови, які дані збирають, три джерела даних, підхід згори вниз, рецензія зі стейкхолдерами і застереження про навантаження не від користувача.
    • ISTQB Glossary — операційний профіль як фактичний або передбачений патерн використання компонента чи системи.
    • Grafana k6 — Automated performance testing — власні аналітика й засоби моніторингу як спосіб знайти типові патерни трафіку.
    • Wikipedia — Application performance management — APM як моніторинг і керування продуктивністю та доступністю програмних застосунків.

    Профіль навантаження: чотири складники

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.4: означення профілю навантаження, термін «virtual users», чотири складники реалістичного профілю; §4.1.2: агрегування операційних профілів дає профіль навантаження, який зазвичай називають сценарієм.
    • ISTQB Glossary — профіль навантаження як документація про задану кількість віртуальних користувачів і набір транзакцій за період.

    Піки, сезонність і мікс сценаріїв

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.4: чотири форми розподілу в часі, зокрема розподіли, що наслідують денні або сезонні цикли; канонічний приклад складеного профілю з фоновим навантаженням і наростанням до 220 користувачів.
    • Grafana k6 — Scenarios — кілька незалежних сценаріїв в одному скрипті, власний екзекʼютор і патерн планування в кожного, власні теги метрик і змінні середовища.
    • Grafana k6 — Load test types — вимога тримати патерн простим і застереження проти профілів-«гірок» заради порівнюваності результатів.

    Час на роздуми: пауза, що змінює навантаження

    • ISTQB Glossary — час на роздуми як час, потрібний користувачеві, щоб визначити й виконати наступну дію в послідовності.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.2: симульовані транзакції можуть включати час на роздуми, і час відповіді плюс час на роздуми дорівнює загальному часу транзакції; §4.2.5: формула пропускної здатності й моделювання навантаження через кількість користувачів і паузи.
    • Apache JMeter — User's Manual: Component Reference — таймер постійної паузи і таймер випадкової паузи: рівноймовірний інтервал, максимум випадкової затримки і постійне зміщення.

    Темп ітерацій (pacing): поняття без канону

    • Micro Focus Silk Performer 19.5 — довідка: Pacing — темп як пауза після завершення транзакції заради заданої частоти, арифметика «пауза плюс час транзакції дорівнює часу сесії» і автоматичне зменшення пауз при сповільненні сервера. Довідка вендора про власну функцію — вендоронезалежним каноном не є.
    • Gatling — Scenario — темп як окремий тип паузи в DSL і приклад «раз на 5 секунд незалежно від паузи всередині».
    • Apache JMeter — User's Manual: Component Reference — таймер утримання заданої пропускної здатності, три бази розрахунку цілі й визнання, що рівні інтервали між семплами нереалістичні.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.2: канон називає лише час на роздуми — паузу всередині сценарію, а не темп ітерацій.

    Наростання і спадання: як уводять навантаження

    Відкрита і закрита моделі

    • Grafana k6 — Open and closed models — означення обох моделей, арифметика шестисекундної ітерації, вплив часу відповіді на навантаження самого тесту, coordinated omission і розчеплення ітерацій у відкритій моделі.
    • Grafana k6 — Executors — чотири екзекʼютори і те, що саме в кожному зафіксовано: кількість користувачів проти кількості ітерацій за період.
    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.5: закриті системи з фіксованою популяцією як типове налаштування тесту і відкриті публічні системи, куди користувачі приходять постійно.
    • Apache JMeter — User's Manual: Component Reference — пуасонівський розклад приходу як реалістичніша модель і рекомендація групи потоків відкритої моделі для профілю навантаження.

    Пастка: 1000 користувачів ≠ 1000 одночасних запитів

    • ISTQB® CT-PT — Foundation Level Specialist Syllabus, Performance Testing v1.0 (2018) — §4.2.5: пропускна здатність задає навантаження, кількість користувачів без операційних профілів мірою не є, приклад із 500 користувачами й 60-кратною різницею, формула пропускної здатності.
    • ISTQB Glossary — віртуальний користувач як симуляція активностей, що виконуються згідно з операційним профілем.
    • Apache JMeter — User's Manual: Elements of a Test Plan — потік як віртуальний користувач: кожен виконує план тесту незалежно, кілька потоків симулюють одночасні зʼєднання.
    • Grafana k6 — Open and closed models — звʼязок тривалості ітерації зі швидкістю старту наступних, через який кількість користувачів не переводиться в запити за секунду напряму.
    • Google SRE Book — Chapter 4. Service Level Objectives — агрегація за вікном виміру: однакове середнє при вдвічі більшому миттєвому навантаженні.

    Пояснення

    «Поясни» працює з власним API-ключем Anthropic: запит іде з вашого браузера прямо до Anthropic.

    Свій API-ключ (BYOK)

    Вставте власний ключ Anthropic — пояснення працюватиме на реальній моделі. Ключ зберігається лише у вашому браузері (localStorage), нікуди не надсилається, крім api.anthropic.com, і не логується.