Получить доступ

Нагрузка превысила возможности сервиса. Какие приёмы позволяют деградировать управляемо, а не упасть целиком?

MiddleНадёжность и идемпотентность
Ещё спрашивают так:
  • Что делать при перегрузке сервиса?
  • Что такое деградация функциональности?
Коротко

Частичный отказ лучше полного: сбрасывать лишнюю нагрузку, отключать второстепенное, отдавать устаревшие данные.

  • Сброс нагрузки — быстрый отказ части запросов, пока очереди не выросли
  • Рубильники для рекомендаций, персонализации, аналитики — освобождают ресурсы главному
  • Устаревшее из кэша лучше, чем ошибка

А ещё Увеличение таймаутов и очередей при перегрузке делает только хуже

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

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

Что хотят услышать

  • Принцип частичного отказа.
  • Конкретные приёмы: сброс нагрузки, отключение второстепенного, устаревшие данные.
  • Почему большие таймауты и очереди вредны.

Частые ошибки

  • Увеличивать таймауты при перегрузке.
  • Отказываться от сброса нагрузки, пытаясь обслужить всех и не обслуживая никого.

Проверьте себя

Несколько верных вариантов. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Сбрасывать избыточную нагрузку: быстро отклонять часть запросов с 429, сохраняя работоспособность для остальных
  • ✓Отключать второстепенную функциональность, сохраняя ключевой сценарий
  • ✓Отдавать слегка устаревшие данные из кэша вместо обращения к перегруженному источнику
  • ✗Увеличивать таймауты, чтобы дождаться ответа перегруженной зависимости

Что спросят дальше

  • Как выбрать, какие запросы отклонять первыми?
  • Почему быстрый отказ полезнее долгого ожидания для вызывающего?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем