Сколько трафика выдерживает молодой магазин, пока не начнёт тормозить оформление заказа?

Интернет-магазин с маленьким каталогом

Предел найден — предварительно

Держит ~17 запр./с на коротких ступенях (2,7 мин), не выдерживает ~29 запр./с

Первым замедлился Добавить в корзину: p95 2–3 с при границе 1,5 с.

Держит
~17запр./с
измерено за 2,7 мин
Не выдерживает
~29запр./с
по SLO

Проверено 6 из 12 шагов на этой скорости; 6 не проверены — мало замеров (< 100 в окне)

  • Выбор доставки
  • Оформление заказа
  • Начало оплаты
  • Платёжная сессия
  • Способы доставки
  • Адрес доставки

ступени по 1,6–3,9 мин · проверки: 79 прошли, 7 не прошли, 34 — мало данных, 40 не выполнялись · подано 100 % плана · здоровье генераторов не подтверждено

Синтетическая нагрузка снаружи; реальный трафик и метрики ваших серверов сюда не входят.

Что делать дальше

  1. Подтвердите нагрузочным тестом на ~14 запр./с.
  2. Чтобы проверить Выбор доставки, Оформление заказа, Начало оплаты и ещё 3, нужен прогон не короче 14 мин на этой скорости: у них меньше 100 замеров.

300 товаров и несколько сотен заказов: магазин в первые месяцы работы.

Пример: настоящий прогон CapacityLab против магазина, который мы держим сами

Как проводился тест

Где лежит предел

Каждая точка — скорость, на которой магазин держали не меньше полутора минут. Она пройдена, если каждый шаг визита с достаточной выборкой держит p95 в границе задержки и ошибок меньше 1%; редкий шаг оформления с малой выборкой на этой скорости показан как отсутствующий, а не как пройденный.

Держит17 запр./сЛомается к28,5 запр./сПредел лежит между ними
  • Не выдержал 30 мин13,5 запр./с
  • Выдержал 60 мин13,5 запр./с
  • Не выдержал 180 мин13,5 запр./с
  • Выдержал 720 мин13,5 запр./с
Замедлился первым
Добавить в корзину
Граница задержки
p95 ≤ 1,5 с

План против факта

Поиск поднимается по лестнице скоростей. На каждой ступени генераторы подавали запланированную скорость; столбики — сколько магазин на самом деле ответил, и его p95 на этой ступени.

01020304001 s2 sp95 ≤ 1,5 с для каждого шага10,11728,5План, запр./с
ПланФактp95 (правая шкала)
ПланФактp95ОшибкиИтог
10,110,3400 мс0%Выдержал
1717,8500 мс0%Выдержал
28,528,41 с0%Сломался
48———Остановлен
Почему 28,5 запр./с не выдержал
  • Добавить в корзину: p95 3 с при границе 1,5 с.
  • Шагов: 6 визита получили меньше трафика, чем по плану: визиты замедлились и отстали от расписания (минимум 82,4% от плана).

Какой шаг замедлился первым

p95 каждого шага визита на каждой скорости против границы. Шаг, который Result называет ограничивающим, отмечен.

Какой шаг замедлился первым
Шаг визитаДоля10,1 запр./с17 запр./с28,5 запр./с
Регион магазинаGET /store/regions
2,9%
—
75 мс
200 мс
КатегорииGET /store/product-categories
8,6%
—
75 мс
200 мс
КаталогGET /store/products
29%
75 мс
100 мс
300 мс
ПоискGET /store/products
12%
75 мс
100 мс
300 мс
Карточка товараGET /store/products/{product_id}
39%
75 мс
100 мс
400 мс
Добавить в корзинуОграничиваетPOST /store/carts
2,9%
—
1 000 мс
3 000 мс
Адрес доставкиPOST /store/carts/{cart_id}
1,4%—
—
—
Способы доставкиGET /store/shipping-options
1,4%—
—
—
Выбор доставкиPOST /store/carts/{cart_id}/shipping-methods
1,4%—
—
—
Начало оплатыPOST /store/payment-collections
0,7%—
—
—
Платёжная сессияPOST /store/payment-collections/{payment_collection_id}/payment-sessions
0,7%—
—
—
Оформление заказаPOST /store/carts/{cart_id}/complete
0,7%—
—
—

p95, SLO ≤ 1 500 мс

Держит ли дольше

Поиск предела находит его за минуты. Длинные прогоны ниже предела показывают, держит ли магазин дальше: утечки, очереди и холодные кэши проявляются не сразу.

  1. Найти пределПредел найден — предварительноДержит ~17 запр./с на коротких ступенях (2,7 мин), не выдерживает ~29 запр./с30 сент. 2026 г., 17:39 UTC
  2. Держать 30 минНе выдержал13,4 запр./с, p95 400 мс, ошибки 0%30 сент. 2026 г., 18:10 UTC
  3. Держать 1 чВыдержал13,6 запр./с, p95 400 мс, ошибки 0%30 сент. 2026 г., 18:42 UTC
  4. Держать 3 чНе выдержал13,5 запр./с, p95 400 мс, ошибки 0%30 сент. 2026 г., 19:44 UTC
  5. Держать 12 чВыдержал13,5 запр./с, p95 400 мс, ошибки 0,03%30 сент. 2026 г., 23:34 UTC
Что не выдержало

На 13,4 запр./с в течение 30 минут магазин держал стабильную пропускную способность и ответил на всё, но у шагов «Выбор доставки», «Оформление заказа» p95 доходил до 2 с при границе 1,5 с: SLO прогона не достигнут. Границу не удержали 2 из 4 длинных прогонов на этой скорости, поэтому соблюдение SLO на ней не подтверждено.

Что мы видели на своих серверах

Этого в отчёте нет: магазин наш, поэтому мы видим метрики его хостинга. У своего приложения вы смотрите свои дашборды; CapacityLab измеряет снаружи.

  • Приложение (Node.js)1,71 vCPUПик памяти 568 MB
  • База данных (PostgreSQL)0,17 vCPUПик памяти 371 MB
  • Кэш (Redis)0,01 vCPUПик памяти 24 MB

Сильнее было нагружено приложение: его CPU доходил до 1,71 vCPU, а база данных оставалась на 0,17. Процесс Node.js выполняет JavaScript в одном потоке, поэтому очередь работы оформления заказа к этому потоку — вероятная причина замедления; напрямую мы это не проверяли.

Ни один из 14 935 запросов не закончился ошибкой сервера.

Что делать дальше

  1. Подтвердить до планов

    Запустить нагрузочный тест на 13,6 запр./с на 30 минут: поиск советует подтвердить эту скорость следующей, и только подтверждение покажет, держит ли каждый шаг свою границу.

  2. Смотреть на свою сторону во время прогона

    Держите открытыми свои дашборды. Отчёт говорит, какой шаг замедлился; ваши метрики — почему.

  3. Изменить одно и сравнить

    После изменения повторите тот же тест и положите два отчёта рядом.

Своя копия этого отчёта — через одну регистрацию

Зарегистрируйтесь по почте. Новый аккаунт откроется с этим и остальными демо-отчётами внутри, чтобы сравнить их со своим первым прогоном.

Открыть этот отчёт в своём аккаунте Регистрация бесплатная. Отчёт уже будет в новом аккаунте, а на первый собственный прогон — $5 кредитов.

Откуда эти цифры

Экспортировано из опубликованных отчётов этих прогонов. CPU и память магазина — из метрик Railway, число ошибок — из его собственного журнала доступа.

Идентификаторы и контрольные суммы
ПрогонDigest результатаПосчитан
cb2d4ac6-406a-49b3-8f17-e5e8d60906e7sha256:c23a8169490b2bbf0f1e209f3a1cec23277a487c410d0540e8396f75cdc3e07230 сент. 2026 г., 17:50 UTC
79157cd2-9038-4fe2-a4b8-babcd3c8f724sha256:dbd4acf035860c28a13410334f2022231904059433aae66eede26e800dda5b7c30 сент. 2026 г., 18:40 UTC
950d737d-69cb-444d-aa0d-c98f69ca88c7sha256:4e3ae46977a2c2f84492d30b2491a277f2327cfa5e26f09d4238523ab8b5c82430 сент. 2026 г., 19:42 UTC
3c84f878-b51e-4691-861c-6bbe489777bdsha256:4fc3848d76d69f6167ff40ef2785e3a296997bc17a0b2ca55ca997564126041630 сент. 2026 г., 22:44 UTC
94412fc5-9c3d-4154-8b93-6be8313ee108sha256:b9b8ee159f287284e651b3cbe3619b18fb93414a4320ec3143ea86cd8a7591d71 окт. 2026 г., 11:36 UTC