Пара 26: Итог: воспроизводимый и наблюдаемый сервис

90 минут · 3 курс, ML.

Содержание и результат

Показать полный путь от чистого checkout до проверенного выпуска и восстановления.

План занятия

0–10: контекст и исходная задача. 10–40: устройство и механизмы. 40–55: демонстрация команд. 55–80: лабораторная работа. 80–90: разбор результата и фиксация исправлений.

Практика выполняется в своей учебной папке и на localhost. Подготовка окружения описана в lab/README.md.

Передача проекта

README должен вести нового человека по реальному пути.

Итоговый комплект: код, артефакт, версия окружения, тесты, Dockerfile, Compose, метрики, dashboard, runbook, release-report и restore-report. README объясняет условия, команды запуска, ожидаемый результат и типичные ошибки. Не требуем Kubernetes и Terraform: надёжный маленький сервис полезнее набора неосмысленных конфигураций. Демонстрация начинается из копии проекта без .venv, контейнера и локальных скрытых настроек. Допускается заранее скачанный базовый образ, если сеть аудитории нестабильна; это явно записывается как условие, а не скрывается.

Аналогия: хорошо оснащённая мастерская может работать с новой сменой.

Доказательства по слоям

Состояния «написано», «проверено» и «запущено» не взаимозаменяемы.

Код в репозитории показывает намерение. Тесты показывают пройденные проверки. Образ показывает упаковку. Работающий контейнер показывает процесс. Smoke показывает выбранный пользовательский путь, dashboard — наблюдение во времени, restore-check — восстановление конкретной копии. Каждый шаг имеет предел доказательства. Студент должен назвать, что именно проверено и что остаётся вне курса: высокая доступность, качество реальной модели, большие данные, внешняя production-нагрузка. Это зрелая инженерная привычка, а не повод обесценивать учебный результат.

Аналогия: проект здания, акт испытаний и заселённый дом подтверждают разные стадии.

Дальнейший маршрут

Следующий инструмент выбираем по проблеме проекта.

После курса студент умеет работать с Linux, Git, контейнерами, CI и базовой наблюдаемостью. Kubernetes нужен при задачах оркестрации, а не как обязательный фон любого Python-скрипта. Infrastructure as Code полезен, когда окружения нужно воспроизводить и изменять управляемо. MLOps добавит управление данными, экспериментами, модельными артефактами и качеством, но основы доставки уже понятны. roadmap.sh используем как карту возможных направлений: нельзя пройти всю карту за три месяца без потери понимания. Каждый студент выбирает следующую конкретную проблему своего проекта и объясняет выбор.

Аналогия: карта страны помогает выбрать маршрут, но не требует посетить все города за одну поездку.

Команды и наблюдения

Окружение: Ubuntu / Bash, новая учебная копия.

python3 -m unittest discover -s tests -v
docker compose config --quiet
docker compose up -d --build
bash scripts/smoke.sh
docker compose -f compose.yaml -f compose.monitoring.yaml up -d
python3 scripts/load.py --requests 30 --concurrency 2
bash scripts/backup.sh

Итоговая демонстрация выполняется в новой папке/Compose project с отдельными портами либо после безопасной остановки старого проекта без удаления данных.

Ожидаемый результат: Новая копия запускается по README; тесты и smoke проходят; metrics доступны, backup проверяемый.

Вариант для macOS

Итог можно защищать на macOS с Docker Desktop. Linux-specific знания проверяются объяснением и предыдущим упражнением Ubuntu. В README обязательно укажите ОС, CPU-архитектуру и отличия команды.

python3 -m unittest discover -s tests -v
docker compose config --quiet
docker compose up -d --build
bash scripts/smoke.sh

Практика: Защита проекта

  1. За 5 минут покажите запуск и SHA, объясните структуру проекта.
  2. За 3 минуты покажите нормальный и неправильный запрос, тест и метрику.
  3. За 5 минут восстановите выбранный безопасный отказ по runbook.
  4. За 2 минуты объясните backup/rollback и ограничения результата; рецензент запускает одну команду из README.

Результат: Итоговый репозиторий и 15-минутная демонстрация команды.

Проверка: Команды воспроизводимы; ошибки обработаны; секретов нет; мониторинг и восстановление подтверждены.

Неисправность для разбора: Проект работает только с неизвестным локальным .env или исправленным вручную контейнером.

Решение и диагностика

Оценка из 100: Linux/диагностика 20, Git/воспроизводимость 15, Docker/Compose 20, CI/контракт 15, наблюдаемость 15, восстановление и объяснение 15. Для каждого пункта есть наблюдаемое доказательство в docs/assessment.md. Повторная попытка после обратной связи разрешена; личные секреты в репозитории требуют немедленной безопасной коррекции до зачёта. Отсутствие дорогого ноутбука не снижает оценку: команда может демонстрировать на одном готовом рабочем месте.

Основные выводы

Самостоятельная работа

После курса выбрать один следующий шаг и написать план проверки его пользы для своего проекта.

Источники