Graceful degradation — когда система при сбое части компонентов продолжает работать с пониженным функционалом, а не падает целиком. Пользователь получает частичный ответ вместо ошибки 500.
Пример: API-эндпоинт собирает данные из трёх сервисов — профиль, рекомендации, уведомления. Если сервис рекомендаций лёг, отдаём профиль без рекомендаций, а не ошибку.
profile, err := getProfile(ctx, userID)
if err != nil {
return err // без профиля смысла нет
}
recs, err := getRecommendations(ctx, userID)
if err != nil {
slog.Warn("recommendations unavailable", "err", err)
recs = []Recommendation{} // деградируем
}
return Response{Profile: profile, Recommendations: recs}
Инструменты: circuit breaker (отключает сбойный сервис), таймауты (не ждём вечно), fallback-значения, feature flags. Важно заранее решить, какие компоненты критичны (без них нет смысла отвечать), а какие опциональны.