中文翻译暂不可用,显示俄语原文。
Как вы проектируете on-call ротацию для AI сервиса?
Краткий тезис
On-call ротация для AI-сервиса — это система дежурств, обеспечивающая круглосуточную реакцию на инциденты. Ключевые элементы: primary (инженер первой линии), secondary (тимлид или старший инженер для эскалации), детальные runbooks для типовых проблем и чёткий процесс эскалации (например, 15 минут без ответа → secondary → lead). Для AI-сервисов важно учитывать специфику: падение качества ответов, дрейф данных, сбои LLM-провайдеров, поэтому runbooks должны покрывать не только инфраструктурные, но и модельные инциденты.
1. Зачем AI-сервису on-call ротация?
On-call — это практика, при которой один или несколько инженеров находятся в режиме ожидания для немедленного реагирования на инциденты. Для AI-сервисов это критично, потому что:
- Пользователи ожидают высокой доступности (SLA 99.9%+). Если сервис отвечает медленно или выдаёт мусор, бизнес теряет деньги.
- Модели могут «ломаться» без изменения кода: дрейф данных, внезапное падение качества эмбеддингов, блокировка API провайдера.
- Сложность диагностики: проблема может быть в retrieval, генерации, промпте или инфраструктуре — нужен человек, способный быстро локализовать.
Без on-call инциденты остаются незамеченными до утра, что неприемлемо для production-систем.
2. Роли в on-call ротации
| Роль | Кто | Обязанности | Время реакции |
|---|---|---|---|
| Primary | Инженер (middle/senior) | Первый ответ на алерт, диагностика, применение runbook, эскалация при необходимости | < 5 минут на подтверждение |
| Secondary | Тимлид / старший инженер | Помощь primary, эскалация сложных проблем, коммуникация с командой | < 15 минут после эскалации |
| Lead / Manager | Руководитель | Критические инциденты (P0), внешние коммуникации, post-mortem | По необходимости |
Важно: secondary не должен дублировать primary — его задача подключаться, когда primary не справляется или не отвечает.
3. Процесс эскалации
Эскалация — это чёткая цепочка повышения уровня ответственности. Пример для AI-сервиса:
- Алерт → primary получает уведомление (PagerDuty, Opsgenie, Telegram-бот).
- Primary не отвечает 15 минут → автоматическая эскалация secondary.
- Secondary не отвечает 10 минут → эскалация lead.
- Lead не отвечает 5 минут → эскалация CTO / VP of Engineering.
Правило: время эскалации должно быть задокументировано и автоматизировано. Ручные звонки — последнее средство.
Для AI-сервисов стоит добавить автоматическую эскалацию по типу инцидента: если алерт связан с падением качества ответов (мониторинг faithfulness), сразу уведомлять ML-инженера, а не только дежурного по инфраструктуре.
4. Runbooks: что должно быть в каждом
Runbook — это пошаговая инструкция по устранению типового инцидента. Для AI-сервиса runbooks делятся на категории:
4.1 Инфраструктурные
- Высокая задержка (latency): проверить CPU/GPU, количество реплик, лимиты API провайдера.
- Ошибки 5xx: проверить балансировщик, логи контейнеров, доступность векторной БД.
- Падение индекса: перестроить индекс, проверить краулер.
4.2 Модельные
- Дрейф данных: запустить пайплайн мониторинга распределений, сравнить с baseline.
- Падение faithfulness: проверить последние изменения в промпте, откатить версию.
- Блокировка API LLM: переключиться на fallback-модель (например, с GPT-4 на Claude).
4.3 Бизнес-метрики
- Резкое падение конверсии: проверить A/B-тесты, откатить фичу, уведомить продакт-менеджера.
Каждый runbook должен содержать:
- Симптомы (как понять, что это именно этот инцидент)
- Диагностические шаги (команды, дашборды)
- Действия по исправлению
- Критерии завершения (как убедиться, что проблема решена)
5. Мониторинг и алерты для on-call
Алерты должны быть actionable (требовать действия) и не шуметь. Для AI-сервиса типовые алерты:
| Метрика | Порог | Действие |
|---|---|---|
| Latency p99 | > 5 сек | Проверить LLM API, масштабирование |
| Error rate | > 1% | Проверить логи, откатить деплой |
| Faithfulness | < 0.8 | Откатить промпт, уведомить ML |
| Hit rate retrieval | < 0.7 | Проверить индекс, эмбеддинги |
| GPU utilization | > 90% | Добавить реплики |
Правило: каждый алерт должен иметь runbook. Если runbook нет — алерт не нужен.
6. Балансировка нагрузки между дежурными
Чтобы избежать выгорания, ротацию проектируют так:
- Продолжительность смены: 1 неделя (не больше 2-х подряд).
- Частота: не чаще 1 раза в 4-6 недель на человека.
- Компенсация: дополнительный выходной или денежная выплата.
- Overlap: в начале смены primary и secondary проводят handoff (передачу контекста).
Для небольших команд (2-3 человека) используют follow-the-sun (дежурство по часовым поясам) или автоматизированное эскалирование до CTO.
7. Онбординг новых дежурных
Новый инженер не должен заступать на дежурство без подготовки. Процесс:
- Shadowing — неделя наблюдения за текущим primary.
- Изучение runbooks — прочитать все, задать вопросы.
- Симуляция инцидентов — GameDay (искусственное создание проблем в staging).
- Пробное дежурство — с secondary в режиме ментора.
Чеклист готовности:
- Умеет читать логи (Kibana, Grafana Loki).
- Знает, как перезапустить сервис.
- Знает, как откатить модель.
- Имеет доступ ко всем системам.
8. Post-mortem и улучшение ротации
После каждого серьёзного инцидента (P0/P1) проводится post-mortem (разбор без обвинений). Цель — улучшить runbooks, мониторинг и процесс.
Вопросы для post-mortem:
- Что пошло не так?
- Почему алерт не сработал раньше?
- Было ли достаточно информации в runbook?
- Как предотвратить повторение?
Результат — обновлённые runbooks, новые алерты, изменения в архитектуре.
9. Автоматизация on-call
Часть рутинных действий можно автоматизировать:
- Авто-эскалация через PagerDuty / Opsgenie.
- Авто-откат модели при падении faithfulness ниже порога.
- Чат-бот для первичной диагностики (например, запрос статуса сервиса через Slack).
- Авто-создание тикета в Jira при эскалации.
Но полную автоматизацию замены дежурного делать нельзя — сложные инциденты требуют человеческого суждения.
10. Психологическая безопасность
On-call — стресс. Чтобы снизить выгорание:
- No-blame culture — ошибки дежурного не наказываются.
- Чёткие границы — после смены дежурный не обязан отвечать на сообщения.
- Поддержка — secondary всегда готов помочь.
- Ретроспективы — команда обсуждает, как улучшить процесс.
Пет-проект для закрепления
Задача: Разработать систему on-call для AI-чат-бота, который отвечает на вопросы по документации.
Инструменты:
- PagerDuty (или Opsgenie) — для ротации и эскалации.
- Grafana + Prometheus — мониторинг метрик (latency, error rate, faithfulness).
- Python-скрипт — симулятор инцидентов.
- GitHub — хранение runbooks в Markdown.
Шаги:
- Определить 3 типовых инцидента (высокая latency, падение faithfulness, ошибка API).
- Написать runbook для каждого.
- Настроить алерты в Grafana (например, при faithfulness < 0.8).
- Создать ротацию в PagerDuty на 2-х человек (primary и secondary) с эскалацией через 15 минут.
- Провести GameDay: запустить скрипт, который искусственно вызывает инцидент, и проверить, как сработает эскалация.
- После инцидента написать post-mortem и обновить runbook.
Ожидаемый результат: Работающая on-call система с документацией, автоматической эскалацией и проверкой через симуляцию.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 385 | Мониторинг AI-сервиса |
| 386 | Алертинг и метрики |
| 388 | Обработка инцидентов |
| 389 | SLA и SLO для AI |
| 391 | Post-mortem культура |
| 395 | Деплоймент и откаты |
Навигация
- Предыдущий: 389
- Следующий: 391
- Индекс: 00. Индекс разборов