Disaster Recovery (DR) для AI сервисов — это стратегия обеспечения непрерывности работы вашего AI-приложения при сбоях провайдеров моделей. Крупнейшие AI-провайдеры (OpenAI, Anthropic, Google) периодически испытывают аутейджи: за 2024 год OpenAI зафиксировал более 10 инцидентов с даунтаймом от 30 минут до нескольких часов. Если ваш продукт зависит от одного провайдера, каждый такой сбой — это потеря пользователей и денег.
Автоматический failover между моделями
Failover — это автоматическое переключение на резервную модель при недоступности основной. Реализация через AI Gateway или в коде приложения:
from openai import OpenAI
import time
client = OpenAI(
base_url="https://api.modelswitch.ru/v1",
api_key="msk_ваш_ключ",
)
FAILOVER_CHAIN = [
{"model": "gpt-4o", "timeout": 30},
{"model": "claude-3.5-sonnet", "timeout": 30},
{"model": "gemini-2.0-pro", "timeout": 45},
{"model": "gpt-4o-mini", "timeout": 15}, # Дешёвый fallback
]
def call_with_failover(messages: list, max_tokens: int = 1000) -> dict:
"""Вызов LLM с автоматическим failover по цепочке моделей"""
errors = []
for config in FAILOVER_CHAIN:
try:
response = client.chat.completions.create(
model=config["model"],
messages=messages,
max_tokens=max_tokens,
timeout=config["timeout"],
)
return {
"content": response.choices[0].message.content,
"model_used": config["model"],
"failover": len(errors) > 0,
}
except Exception as e:
errors.append({"model": config["model"], "error": str(e)})
continue
raise RuntimeError(f"All models failed: {errors}")
Через ModelSwitch все модели доступны через один API-ключ, поэтому failover не требует управления несколькими аккаунтами и ключами.
Circuit Breaker паттерн
Circuit Breaker предотвращает каскадные сбои, временно «отключая» провайдера после серии ошибок:
import time
from collections import defaultdict
class CircuitBreaker:
def __init__(self, failure_threshold=3, recovery_time=60):
self.failure_threshold = failure_threshold
self.recovery_time = recovery_time
self.failures = defaultdict(int)
self.last_failure = defaultdict(float)
self.state = defaultdict(lambda: "closed") # closed | open | half-open
def is_available(self, model: str) -> bool:
if self.state[model] == "closed":
return True
if self.state[model] == "open":
if time.time() - self.last_failure[model] > self.recovery_time:
self.state[model] = "half-open"
return True # Пробуем один запрос
return False
return True # half-open
def record_success(self, model: str):
self.failures[model] = 0
self.state[model] = "closed"
def record_failure(self, model: str):
self.failures[model] += 1
self.last_failure[model] = time.time()
if self.failures[model] >= self.failure_threshold:
self.state[model] = "open"
breaker = CircuitBreaker(failure_threshold=3, recovery_time=60)
Graceful degradation
Когда все премиум-модели недоступны, приложение должно деградировать корректно, а не падать. Стратегии деградации:
- Понижение модели — переход с GPT-4o на GPT-4o-mini (дешевле, быстрее, менее качественно)
- Кэшированные ответы — возврат ранее сгенерированного ответа на похожий вопрос
- Шаблонные ответы — для критичных сценариев (оплата, авторизация) — заготовленные ответы без LLM
- Уведомление пользователя — честно сообщите о временных ограничениях
async function getResponse(query: string): Promise<string> {
try {
// Основная модель
return await callLLM("gpt-4o", query);
} catch {
try {
// Fallback на дешёвую модель
return await callLLM("gpt-4o-mini", query);
} catch {
// Кэш или шаблон
const cached = await getCachedResponse(query);
if (cached) return cached;
return "Извините, сервис временно недоступен. Попробуйте через несколько минут.";
}
}
}
Бэкап стратегии и SLA
Для production AI-сервисов рекомендуется:
- Multi-provider подход — всегда имейте минимум 2 провайдера в failover-цепочке
- Health checks — регулярно проверяйте доступность каждого провайдера (каждые 30 секунд)
- Бюджетный резерв — держите баланс у каждого провайдера, достаточный для 24 часов работы
- SLA мониторинг — отслеживайте фактический uptime по каждому провайдеру
- Incident runbook — документ с пошаговыми действиями при различных типах сбоев
ModelSwitch как AI Gateway берёт на себя часть DR: он мониторит состояние провайдеров, маршрутизирует запросы и предоставляет единый SLA 99.9%. Вместо управления пятью аккаунтами вы управляете одним.
Заключение
Disaster Recovery для AI — это не роскошь, а необходимость для production-сервисов. Реализуйте failover-цепочку через несколько провайдеров, добавьте circuit breaker для предотвращения каскадных сбоев и предусмотрите graceful degradation для крайних случаев. AI Gateway упрощает DR, предоставляя единую точку входа с встроенным мониторингом и маршрутизацией.