Демо-отчёты

Настоящие отчёты о нагрузке на приложениях, которые мы держим сами

Мы держим open-source приложения на Railway и подаём на них трафик настоящих пользователей. Потом ищем скорость, на которой каждое перестаёт держать обещания. Каждая цифра ниже — из настоящего прогона.

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

Один магазин, три ситуации

Мы держим open-source магазин (Medusa v2) на Railway и подаём на него трафик настоящих визитов: каталог, поиск, карточка товара, корзина, оплата. Потом ищем скорость, на которой он перестаёт держать обещания.

Каждая колонка — поиск предела. Зелёное — скорость, которую магазин выдержал, удерживая каждый шаг визита в границе задержки; штриховка — где лежит предел; красное — где он сломался. Приложение и его лимиты у магазинов одинаковые, но ресурсы баз данных не ограничены и прогревались по-разному, поэтому колонки сравнивают три наблюдавшиеся конфигурации, а не влияние одного объёма данных.

Маленький каталог

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

Держит
17 запр./с
Ломается к
28,5 запр./с
Замедлился первым
Добавить в корзину

Большой каталог

50 000 товаров, 150 000 покупателей и 100 000 заказов: магазин после нескольких насыщенных лет.

Держит
22,5 запр./с
Ломается к
30,7 запр./с
Замедлился первым
Поиск

Чёрная пятница

Большой каталог под визитом дня распродажи при постоянной скорости: меньше просмотров, больше корзин и заказов на визит. Это модель состава визита, а не всплеска трафика в день распродажи.

Держит
30,3 запр./с
Ломается к
35,3 запр./с
Замедлился первым
Поиск

Визит, который мы проигрываем

Каждый сценарий подаёт один и тот же вид визита, шаг за шагом, как покупатель идёт по магазину. Столбики — доля шага во всех запросах прогона с маленьким каталогом; визит Чёрной пятницы переносит вес с просмотра на корзины и заказы при постоянной скорости, без всплеска трафика.

  1. Регион магазинаGET /store/regions
  2. КатегорииGET /store/product-categories
  3. КаталогGET /store/products
  4. ПоискGET /store/products
  5. Карточка товараGET /store/products/{product_id}
  6. Добавить в корзинуPOST /store/carts
  7. Адрес доставкиPOST /store/carts/{cart_id}
  8. Способы доставкиGET /store/shipping-options
  9. Выбор доставкиPOST /store/carts/{cart_id}/shipping-methods
  10. Начало оплатыPOST /store/payment-collections
  11. Платёжная сессияPOST /store/payment-collections/{payment_collection_id}/payment-sessions
  12. Оформление заказаPOST /store/carts/{cart_id}/complete

Один бэкенд такси, три вечера

Мы держим на Railway гео-бэкенд такси: Tile38 хранит живые координаты водителей и открытые заказы, OSRM строит маршруты по дорожному графу Москвы, Photon геокодирует адреса, а перед ними стоит один входной прокси Caddy. 20 000 синтетических водителей ездят по Москве и присылают координаты; между пингами пассажиры ищут машину, получают маршрут и цену, а часть из них заказывает.

Каждая колонка — поиск предела. Зелёное — скорость, которую бэкенд выдержал, удерживая каждый вызов в границе задержки; штриховка — где лежит предел; красное — где он сломался.

Обычный вечер

20 000 водителей по всей Москве присылают свои координаты; на каждые десять пингов один пассажир ищет машину, и половина пассажиров заказывает.

Держит
800 запр./с
Ломается к
—

Час пик под дождём

Вдвое больше пассажиров и втрое больше заказов, чем в обычный вечер. Половина подборов не находит машину рядом и ищет снова в радиусе 4 км, поэтому таблиц времени подачи считается больше.

Держит
800 запр./с
Ломается к
—

Матч в Лужниках

70% пассажиров стоят в пределах 800 м от стадиона, и 30% пингов приходят от водителей, которые ждут там: одна гео-ячейка принимает большую часть нагрузки.

Держит
320 запр./с
Ломается к
не установлен

Поездка, которую мы проигрываем

Каждый тик поездки — водитель присылает свои координаты. Часть тиков ещё и обслуживает пассажира: геокодировать адрес, найти водителей в радиусе 2 км, построить маршрут и цену, проверить спрос в ячейке пассажира и, если он заказывает, получить время подачи от ближайших машин и сохранить заказ. Столбики — доля вызова во всех запросах первого сценария такси; дождь и стадион меняют смесь и то, в какую часть города она приходит.

  1. Пинг координат водителяGET /tile38/SET+fleet+d00001+POINT+55.7558+37.6173
  2. Геокодирование адресаGET /photon/api
  3. Водители рядомGET /tile38/NEARBY+fleet+LIMIT+5+POINTS+POINT+55.7558+37.6173+2000
  4. Маршрут и ценаGET /osrm/route/v1/driving/37.6173,55.7558;37.5537,55.7158
  5. Проверка спроса в ячейкеGET /tile38/NEARBY+orders+COUNT+POINT+55.7158+37.5537+1000
  6. Время подачи ближайших машинGET /osrm/table/v1/driving/37.6100,55.7500;37.6200,55.7600;37.6173,55.7558
  7. Создание заказаGET /tile38/SET+orders+o0000000000000000+EX+900+POINT+55.7558+37.6173

Каждый из этих отчётов можно изучить у себя

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

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