Какие решения принять при нехватке ресурсов для обработки запросов с задержкой
Что проверяют
Что вы делаете, когда масштабироваться нельзя: бюджета или железа нет, а запросы копятся и отвечают с задержкой. Интервьюер ждёт разговора о компромиссах между задержкой, пропускной способностью и качеством. Следом часто спрашивают, какие запросы вы готовы отклонить.
Как отвечать
Сначала уточните требования: какие запросы нужны онлайн, а какие подождут, какой SLA по задержке и что для бизнеса хуже: медленный ответ, отказ или ответ похуже качеством. Дальше каркас:
- разделить синхронное и асинхронное: тяжёлое уходит в очередь, клиент получает
202 Acceptedи забирает результат позже или получает вебхук; - ограничить вход: rate limiting и ограниченная очередь. Когда она заполнена, лучше сразу ответить
429или503сRetry-After, чем держать запрос до таймаута клиента. По закону Литтла среднее число запросов в системе равно интенсивности потока, умноженной на среднее время в ней, поэтому очередь без предела только растит задержку; - приоритеты и изоляция: отдельные пулы для критичного трафика (bulkhead), чтобы тяжёлые отчёты не съедали ресурсы онлайна;
- дедлайны: запрос, клиент которого уже ушёл, выбрасывается, а не обрабатывается. В gRPC дедлайн передаётся по цепочке вызовов;
- удешевить модель: квантизация, каскад, где лёгкая модель отвечает на простые случаи, а тяжёлая только на неуверенные, кеш повторных запросов;
- батчинг: динамический батчинг, например в Triton с
max_queue_delay_microseconds, поднимает пропускную способность ценой небольшой задержки; - считать заранее: предсказуемые ответы вроде рекомендаций считаются ночью пакетно и отдаются из key-value хранилища.
Закончите тем, как проверите эффект: p99 задержки, доля отказов, время в очереди.
Где спотыкаются
Ставят неограниченную очередь и считают проблему решённой. Задержка растёт без предела, а ресурсы уходят на ответы, которых клиент уже не ждёт.
Делают повторы без экспоненциальной задержки и джиттера. При перегрузке клиенты сами умножают нагрузку, и система не может подняться.
Отвечают «возьмём больше серверов», хотя вопрос как раз про нехватку ресурсов, и не предлагают ни приоритетов, ни деградации.