Домашние задания
Теория и практика — отдельно. Репозитории с решениями и отчёты.
Общие правила сдачи
- Формат: GitHub/GitLab репозиторий + README с инструкциями запуска.
- Язык: Python (FastAPI/Flask допустимы), тесты: pytest (по возможности).
- Оценивание: корректность (40%), архитектура (40%), чистота кода (20%).
- Запрещено: копипаст чужих решений. Разрешено: обсуждать идеи.
Шкала сложности
S легко • M средне • L сложно
1) CQRS (с CQS) M
Тема: разделение команд и запросов, отдельные модели чтения/записи.
Задание
- Сервис заказов: Commands (создать/отменить заказ), Queries (список/детали).
- Write-модель: PostgreSQL (нормализовано). Read-модель: MongoDB/Elasticsearch/SQLite (денормализовано).
- Синхронизация через события (in-memory bus/Redis/Kafka — на выбор).
Критерии приёмки
- Чёткая CQS (ни один handler не смешивает чтение и запись).
- Read-модель обновляется асинхронно и отвечает быстро (без джойнов).
- README с диаграммой потоков данных.
2) Event Sourcing L
Тема: хранение событий и построение проекций.
Задание
- Аккаунтинг/кошелёк: события пополнения/списания, восстановление состояния из истории.
- Снимки (snapshots) каждые N событий.
- Проекция баланса и истории операций для быстрого чтения.
Критерии приёмки
- Идемпотентные обработчики событий.
- Тесты на восстановление состояния к произвольной дате.
- Документация рисков (reordering, duplicates).
3) Message Queues & Streams M
Тема: очереди задач vs потоковые платформы.
Задание
- Сервис генерации PDF/скриншотов: API ставит задания в очередь (RabbitMQ/Redis), worker обрабатывает.
- Dead Letter Queue для падений, retry с экспоненциальной задержкой.
- Метрики в Prometheus (кол-во задач, ошибки, среднее время).
Критерии приёмки
- Гарантии at-least-once и идемпотентность обработчиков.
- Наглядные метрики/дашборд (скриншот в README).
- Сценарий нагрузочного теста (скрипт + результаты).
4) Microservices + API Gateway L
Тема: изоляция сервисов, API Gateway, resiliency.
Задание
- Три сервиса: users, orders, payments. Взаимодействие через HTTP.
- API Gateway (FastAPI/Nginx) — маршрутизация и rate-limiting.
- Сircuit breaker и retry (lib/паттерн) на межсервисных вызовах.
Критерии приёмки
- Изоляция падений (падение payments не валит весь поток).
- Чёткие контракты (OpenAPI), негативные тесты контрактов.
- Диаграмма сервисной топологии.
5) ORMs: Data Mapper vs Active Record M
Тема: слой доступа к данным и миграции.
Задание
- Реализовать одинаковый функционал двумя способами: SQLAlchemy (Data Mapper) и Django ORM (Active Record).
- Написать заметку-сравнение: DX, сложность запросов, тестируемость, производительность.
- Показать решение N+1 и eager loading.
Критерии приёмки
- Рабочие миграции и воспроизводимые шаги запуска.
- Примеры сложных запросов в обоих подходах.
- Таблица сравнения в README.
6) DDD (Entities, Value Objects, Repositories) M
Тема: богатая модель домена.
Задание
- Смоделировать домен бронирования (User, Booking, DateRange, Money).
- Инварианты: пересечение дат, отмена/изменение, расчёт цены.
- Repository-интерфейсы и in-memory реализации для тестов.
Критерии приёмки
- Value Objects неизменяемы и валидируют инварианты.
- Юнит-тесты на бизнес-правила.
- Инфраструктура отделена от домена.
7) Serverless S/M
Тема: функции как сервис.
Задание
- Lambda/Functions endpoint: загрузка файла в S3/Blob, событие — обработчик-ресайзер.
- Стейт-машина/оркестрация (AWS Step Functions/Azure Durable) — по желанию.
Критерии приёмки
- Инфраструктура как код (serverless.yml/terraform — базово).
- Схема событий и ретраев.
- Описанные лимиты (cold start, timeout) и как вы их учитываете.
8) Use Cases + DTOs + Mappers S/M
Тема: слой приложения и контракты.
Задание
- API для профилей: create/update (Use Case), DTO валидация (Pydantic), мапперы.
- Контроллеры тонкие, бизнес-логика в Use Case.
Критерии приёмки
- Наличие позитивных и негативных тестов Use Case.
- Чёткое разделение слоёв.
- Документация контракта (OpenAPI или схематично).
Формат отчёта
- Краткая архитектурная записка (1–2 страницы): решения, trade-offs, ограничения.
- Диаграмма (PlantUML/mermaid/картинка) ключевых компонентов.
- Инструкция запуска и smoke-тестов.