← КурсСамостоятельный просмотрПульт

Пара 25 / Резерв

Game day: выпуск с аварией

Работать по ролям, сохранить факты, восстановить сервис и написать разбор инцидента.

Контекст

Один координирует, другой проверяет, третий фиксирует.

Работать по ролям, сохранить факты, восстановить сервис и написать разбор инцидента.

Роли уменьшают хаос

Один координирует, другой проверяет, третий фиксирует.

01Координатор
02Оператор
03Наблюдатель
04Общий журнал

Аналогия: пожарная команда делит задачи, а не все бегут к одному вентилю.

Восстановление раньше большого рефакторинга

Уменьшаем воздействие обратимым изменением.

01Симптом / факты
02Снижение воздействия
03Smoke
04Причина / профилактика

Аналогия: сначала останавливаем течь, потом меняем конструкцию водопровода.

Разбор без поиска виноватого

Объясняем, как условия позволили ошибке пройти.

01Воздействие
02Временная линия
03Условия сбоя
04Конкретное улучшение

Аналогия: расследование аварии улучшает систему, а не только находит фамилию.

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

Ubuntu / Bash, lab; преподаватель выбирает один сценарий

bash scripts/smoke.sh
# Scenario: missing model artifact on the next launch
MODEL_PATH=/app/models/missing.json docker compose up -d --force-recreate app
docker compose ps
docker compose logs --tail 30 app
MODEL_PATH=/app/models/model.json docker compose up -d --force-recreate app
bash scripts/smoke.sh

Разбор результата

app не проходит запуск с отсутствующим артефактом; журнал называет причину; корректный путь восстанавливает пользовательский запрос.

Сценарий проводится только в учебном lab. Перед началом остановите конфликтующие ручные запуски и подготовьте backup.

На macOS

Game day выполняется в своём Docker/Compose project. Для native Mac используйте lsof вместо ss; системные службы macOS и личные данные не затрагиваются.

docker compose ps
docker compose logs --tail 30 app
bash scripts/smoke.sh

Командная аварийная тренировка

  1. За 5 минут запишите baseline: версия, healthz, predict, число событий.
  2. Преподаватель выбирает неверный порт клиента, отсутствующий артефакт, DELAY_MS=1000 или остановку app.
  3. За 20 минут восстановите сервис по runbook, фиксируя команды и время.
  4. За 15 минут напишите postmortem и предложите одну профилактику, затем поменяйтесь ролями и повторите короткий сценарий.

Что должно получиться

incident-report.md с доказанным восстановлением и одним улучшением.

Изменения ограничены своим lab; исходный volume сохранён; все настройки вернулись к baseline.

Ошибка для диагностики

Устранив симптом, команда заявляет, что коренная причина доказана без журнала и проверки.

Симптом→Гипотеза→Проверка

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

  1. Воздействие, временная линия, восстановление и конкретное улучшение.
  2. Только если причина доказана и именно это действие её устраняет; обычно это восстановление.

После пары

Подготовить итоговую демонстрацию и проверить все инструкции на чистом окружении.

Конспект, команды и разбор →

Пара 26 / Резерв

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

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

Контекст

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

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

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

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

01Чистая копия
02Инструкция
03Проверки
04Рабочий пользовательский путь

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

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

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

01Код / SHA
02Тесты / образ
03Запуск / smoke
04Наблюдение / восстановление

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

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

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

01Linux / Git
02Контейнеры / CI
03Наблюдаемость
04Следующая реальная задача

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

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

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

Разбор результата

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

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

На 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 или исправленным вручную контейнером.

Симптом→Гипотеза→Проверка

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

  1. Он обнаружит скрытые предположения, которые автор считает очевидными.
  2. По реальной проблеме проекта и необходимому результату.

После пары

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

Конспект, команды и разбор →