Вопрос проверяет умение проектировать устойчивое взаимодействие с нестабильными внешними зависимостями.
Нужно считать сбои внешнего сервиса нормальной ситуацией и обрабатывать их явно. Используются таймауты, ограниченные ретраи и circuit breaker. Важно различать временные и фатальные ошибки. Для бизнеса часто применяют fallback или деградацию функциональности. Логирование и метрики обязательны для контроля.
Нестабильность внешних сервисов — не исключение, а рабочий сценарий. Архитектура должна быть к этому готова.
Сначала важно зафиксировать: внешний сервис всегда может быть недоступен, и это не должно ломать всю систему.
Timeout
ограничивает время ожидания
предотвращает зависание воркеров
Retry
только для идемпотентных операций
с ограничением количества и задержкой
Circuit breaker
временно отключает вызовы при массовых ошибках
защищает систему от каскадных отказов
Fallback
возврат кешированных или упрощённых данных
частичная деградация функциональности
Fail-fast
быстрое завершение запроса при явной недоступности
async def fetch():
try:
return await http_call(timeout=2)
except TimeoutError:
return fallback_data()
Бесконечные ретраи
Одинаковая логика для всех ошибок
Отсутствие метрик по отказам
Жёсткая зависимость бизнес-логики от внешнего API
Корректная обработка недоступных внешних сервисов строится на таймаутах, ограниченных ретраях, деградации и защите от каскадов. Это делает систему предсказуемой под нагрузкой.