Сквозной проект объединяет знания из нескольких разделов базы в одной законченной системе.
Цель проекта — пройти полный инженерный цикл: определить задачу, спроектировать решение, реализовать приложение, организовать хранение данных, подготовить инфраструктуру, автоматизировать доставку и обеспечить эксплуатационную готовность.
Общая идея
Необходимо создать небольшую прикладную систему, которая:
- решает понятную пользовательскую или бизнес-задачу;
- предоставляет пользовательский интерфейс или API;
- содержит серверную бизнес-логику;
- сохраняет данные в постоянном хранилище;
- взаимодействует хотя бы с одной внешней системой;
- запускается в воспроизводимом окружении;
- доставляется через автоматизированный pipeline;
- предоставляет логи, метрики и проверки состояния;
- учитывает основные требования безопасности и надёжности.
Возможные темы
- система учёта складских операций;
- сервис обработки заказов;
- система регистрации и обработки обращений;
- сервис управления задачами;
- мониторинг состояния внешних сервисов;
- система резервирования ресурсов;
- каталог оборудования или программных компонентов;
- сервис приёма, обработки и поиска событий;
- платформа запуска фоновых задач;
- система управления уведомлениями.
Основные компоненты
- Клиентский интерфейс — веб-интерфейс, консольное приложение или внешний API.
- Backend-приложение — обработка запросов, бизнес-правил и пользовательских сценариев.
- Хранилище данных — реляционная или другая база данных с миграциями и резервным копированием.
- Асинхронная обработка — очередь сообщений, брокер событий или механизм фоновых задач.
- Кеширование — необязательный слой для ускорения чтения или снижения нагрузки.
- Инфраструктура — контейнеры, сеть, конфигурация, секреты и постоянные тома.
- Платформа выполнения — Docker Compose, Kubernetes или виртуальные машины.
- Процесс доставки — сборка, тестирование, публикация артефактов и развёртывание.
- Наблюдаемость — структурированные логи, метрики, трассировки и dashboards.
- Безопасность — аутентификация, авторизация, защита секретов и ограничение полномочий.
Этапы проекта
Постановка задачи
- описать пользователя и решаемую проблему;
- определить основной пользовательский сценарий;
- сформулировать функциональные требования;
- определить нефункциональные требования;
- зафиксировать критерии готовности.
Проектирование
- определить границы системы;
- выделить основные компоненты;
- спроектировать модель данных;
- описать API и интеграции;
- определить возможные отказы;
- зафиксировать значимые архитектурные решения.
Реализация
- создать минимальный сквозной сценарий;
- реализовать бизнес-логику;
- добавить работу с хранилищем;
- реализовать обработку ошибок;
- добавить автоматизированные тесты;
- подготовить документацию запуска.
Инфраструктура
- подготовить контейнерные образы;
- описать локальное окружение;
- вынести конфигурацию из кода;
- организовать управление секретами;
- ограничить ресурсы и полномочия компонентов;
- описать инфраструктуру воспроизводимым способом.
Доставка
- настроить проверки исходного кода;
- автоматизировать тестирование;
- собирать неизменяемый артефакт;
- публиковать версионированные образы;
- автоматизировать развёртывание;
- предусмотреть проверку и откат релиза.
Эксплуатация
- добавить health, readiness и liveness checks;
- настроить структурированные логи;
- определить ключевые метрики;
- подготовить dashboard;
- создать несколько полезных оповещений;
- написать runbook диагностики;
- проверить резервное восстановление.
Проверка надёжности
- остановить один экземпляр приложения;
- сделать недоступной базу данных;
- добавить сетевую задержку;
- заполнить очередь сообщений;
- ограничить память или процессор;
- повторно отправить одну операцию;
- проверить восстановление после сбоя.
Обязательные сквозные сценарии
Проект должен позволять последовательно разобрать:
- путь пользовательского действия;
- путь HTTP-запроса;
- путь данных от ввода до хранилища;
- путь асинхронного сообщения;
- путь программного изменения до production;
- путь диагностического сигнала;
- путь отказа и восстановления;
- путь аутентификации и проверки доступа.
Результаты проекта
По завершении должны быть подготовлены:
- описание задачи и требований;
- схема архитектуры;
- описание модели данных;
- спецификация API;
- исходный код;
- автоматизированные тесты;
- контейнерные образы;
- инфраструктурные описания;
- CI/CD pipeline;
- инструкции локального запуска;
- инструкция развёртывания;
- dashboard и правила оповещений;
- runbook диагностики;
- план резервного восстановления;
- описание проведённых экспериментов;
- список известных ограничений;
- перечень возможных улучшений.
Критерии завершения
Проект считается завершённым, если:
- основной пользовательский сценарий работает;
- система запускается по документации;
- окружение создаётся воспроизводимым способом;
- данные сохраняются после перезапуска;
- ошибки не приводят к неконтролируемому повреждению состояния;
- повторные запросы не создают нежелательных дубликатов;
- автоматизированные проверки выполняются успешно;
- новая версия может быть развёрнута и отменена;
- состояние системы возможно определить по телеметрии;
- типовые неисправности можно диагностировать по runbook;
- резервная копия проверена практическим восстановлением;
- основные технические решения и ограничения задокументированы.