5 / 10
Как уложить весь конвейер в бюджет 150 мс и что делать при отказе части источников?
Разложить бюджет по этапам и защитить каждый таймаутом. Типичная раскладка: отбор 20 мс (источники параллельно), получение признаков 20 мс (пакетно), ранжирование 60 мс, переранжирование и сборка 10 мс, остальное — сеть и запас. Каждый внешний вызов идёт с собственным таймаутом заметно меньше общего бюджета. При отказе — деградация, а не ошибка: не ответил источник кандидатов, собираем из остальных; не пришли признаки, считаем с пропусками; упало всё, отдаём популярное из кэша. Пустой экран — худший из возможных исходов, и архитектура должна исключать его целиком.