Одна горячая ячейка тормозит весь город или только тех, кто в ней стоит?

Бэкенд такси после матча в Лужниках

Предел не подтверждён

Держит ~320 запр./с на коротких ступенях (3,3 мин); на ~800 запр./с ухудшение не подтверждено

Не прошли проверки: Создание заказа: проверки ответа 99,9 % < 100 %, Пинг координат водителя: проверки ответа 99,9 % < 100 %, Время подачи ближайших машин: проверки ответа 99,9 % < 100 % и ещё 2.

Держит
~320запр./с
измерено за 3,3 мин

Проверены все 7 шагов на этой скорости

ступени по 71 с–4 мин · проверки: 198 прошли, 12 не прошли, 0 — мало данных, 0 не выполнялись · подано 99 % плана · здоровье генераторов не подтверждено

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

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

  1. Дальше искать между ~320 и 1 000 запр./с.

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

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

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

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

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

Держит320 запр./сВерхняя граница не установлена выше 320 запр./с
  • Выдержал 30 мин256 запр./с
Почему верхней границы пока нет

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

Граница задержки
p95 ≤ 500 мс

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

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

02505007501 0000200400600p95 ≤ 500 мс для каждого шага4080160320800План, запр./с
ПланФактp95 (правая шкала)
ПланФактp95ОшибкиИтог
4041,230 мс0%Выдержал
8081,850 мс0%Выдержал
16016150 мс0%Выдержал
32031850 мс0%Выдержал
800794200 мс0,06%Ухудшение не подтверждено
Что измерили на 800 запр./с
  • Создание заказа: ответы не прошли проверки.
  • Пинг координат водителя: ответы не прошли проверки.
  • Время подачи ближайших машин: ответы не прошли проверки.
  • Водители рядом: ответы не прошли проверки.
  • Маршрут и цена: ответы не прошли проверки.
  • Проверка спроса в ячейке: ответы не прошли проверки.

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

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

Какой вызов замедлился первым
ВызовДоля80 запр./с160 запр./с320 запр./с800 запр./с
Пинг координат водителяGET /tile38/SET+fleet+d00001+POINT+55.7558+37.6173
49%
50 мс
50 мс
50 мс
200 мс0,1% ошибок
Геокодирование адресаGET /photon/api
9,8%
50 мс
30 мс
50 мс
150 мс0,1% ошибок
Водители рядомGET /tile38/NEARBY+fleet+LIMIT+5+POINTS+POINT+55.7558+37.6173+2000
9,8%
50 мс
50 мс
50 мс
200 мс0,1% ошибок
Маршрут и ценаGET /osrm/route/v1/driving/37.6173,55.7558;37.5537,55.7158
9,8%
30 мс
30 мс
30 мс
100 мс0% ошибок
Проверка спроса в ячейкеGET /tile38/NEARBY+orders+COUNT+POINT+55.7158+37.5537+1000
9,8%
50 мс
50 мс
50 мс
200 мс0,1% ошибок
Время подачи ближайших машинGET /osrm/table/v1/driving/37.6100,55.7500;37.6200,55.7600;37.6173,55.7558
5,9%
30 мс
30 мс
50 мс
100 мс0,1% ошибок
Создание заказаGET /tile38/SET+orders+o0000000000000000+EX+900+POINT+55.7558+37.6173
5,9%
50 мс
50 мс
50 мс
300 мс0,1% ошибок

p95, SLO ≤ 500 мс

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

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

  1. Найти пределПредел не подтверждёнДержит 320 запр./с; верхняя граница не установлена2 окт. 2026 г., 15:22 UTC
  2. Держать 30 минВыдержал255 запр./с, p95 50 мс, ошибки 0%2 окт. 2026 г., 18:13 UTC

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

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

  • Входной прокси (Caddy)1,09 vCPUПик памяти 79 MB
  • Гео-база (Tile38)1,64 vCPUПик памяти 187 MB
  • Маршрутизация (OSRM)0,21 vCPUПик памяти 227 MB
  • Геокодер (Photon)0,85 vCPUПик памяти 8 162 MB

Больше всех был нагружен сервис «Гео-база (Tile38)»: его CPU доходил до 1,64 vCPU, следующий — «Входной прокси (Caddy)» с 1,09.

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

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

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

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

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

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

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

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

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

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

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

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

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

Идентификаторы и контрольные суммы
ПрогонDigest результатаПосчитан
52f512ce-a064-4e5e-9582-2bd0c87c5d86sha256:165b351f223b9ff57e483cc90557ca4bfafa3b964c4e35bf2e09dd611801fb022 окт. 2026 г., 15:39 UTC
b03c332d-2453-4ea5-9de4-09edd18ecc9esha256:2d8309993955fe75a7383108b1d0fcbaeda728a08cd2daa8ed268d9a69c69cd32 окт. 2026 г., 18:43 UTC