Микросервисная архитектура в продакшен разработке
О чём курс
Курс обучает проектированию масштабируемых распределённых систем на стеке Python и переходу от монолитной архитектуры к микросервисной. На практических примерах автор разбирает разграничение сервисов по бизнес-возможностям, проектирование устойчивых API, работу с очередями сообщений и проведение распределённых транзакций без единой ACID-базы.
О чём курс
Программа охватывает инженерные аспекты создания и поддержки микросервисов: от выстраивания архитектурных границ до развёртывания и наблюдаемости в продакшене. Вы научитесь оценивать задержки сети, доступность цепочек вызовов и риски частичных отказов. Материал ориентирован на прикладные задачи, возникающие при декомпозиции монолита и разделении общих баз данных.
В курсе разбираются архитектурные шаблоны и подходы: Transactional Outbox, Saga, CQRS, Strangler Fig, Dead Letter Queue и API Composition. Практическая работа строится вокруг веб-фреймворка FastAPI, брокера Apache Kafka и реляционной СУБД PostgreSQL.
Кому подойдёт
Курс рассчитан на разработчиков и технических лидеров с опытом:
- Middle-разработчики научатся видеть архитектуру системы целиком, определять границы компонентов и закладывать обработку сценариев отказа;
- Senior-разработчики систематизируют знания о распределённых данных, очередях событий, межсервисных контрактах и устойчивости сервисов;
- Тимлиды и техлиды разберут, как связывать архитектурные границы сервисов с бизнес-процессами, структурой команд и процессами независимого развёртывания;
- Инженеры в процессе перехода к микросервисам разберутся, когда такое разделение оправдано и как избежать появления распределённого монолита.
Необходимая подготовка
Обучение ориентировано на действующих разработчиков. Для освоения программы требуются практические знания:
- языка программирования Python;
- протокола HTTP и принципов проектирования API;
- языка запросов SQL;
- методов и инструментов автоматизированного тестирования.
Практические задачи
В рамках практических заданий вы отработаете следующие инженерные сценарии:
- разделение учебного интернет-магазина на независимые сервисы, составление карты владельцев данных и измерение стоимости сетевых вызовов;
- проектирование API заказов на FastAPI и создание клиента оплаты, устойчивого к задержкам, дедлайнам и потерянным ответам;
- передача событий через Apache Kafka, настройка Transactional Outbox и гарантированная однократная обработка уведомлений;
- реализация саги оформления заказа с компенсациями, управление параллельными резервами и устранение гонок в PostgreSQL;
- создание BFF для клиентского экрана, проверка токенов JWT и сборка CQRS-проекций из истории событий Kafka;
- настройка сквозной трассировки в Jaeger, связывание логов с трейсами, настройка проб работоспособности и планирование безопасных обновлений сервисов.
Программа обучения
- От монолита к микросервисам
- Научишься проводить границы сервисов по бизнес-возможностям
- Определишь владельцев данных и единые источники истины
- Измеришь "налог на микросервисы": задержки, доступность цепочки и количество мест отказа
- Разберёшь влияние процессов Python, uvicorn и asyncio на развёртывание сервиса
- Разделишь учебный интернет-магазин на сервисы, составишь карту владельцев данных и измеришь стоимость сетевых вызовов
- Домашнее задание: Определишь владельцев данных бонусной системы и её взаимодействие с остальными сервисами. Обоснуешь архитектурное решение: выделять склад в отдельный сервис или оставить модулем монолита
- Результат недели: Разберёшься, чем микросервисы отличаются от модульного и распределённого монолита и когда их использование действительно оправдано.
- Синхронное взаимодействие и проектирование API
- Спроектируешь контракт с помощью канвы целей API
- Научишься проектировать и обрабатывать ошибки при взаимодействии между сервисами
- Разберёшь совместимое развитие API и терпимое чтение
- Добавишь таймауты, повторы с jitter, общий дедлайн и предохранитель
- Защитишь повторные POST-запросы ключом идемпотентности
- Проверишь, почему таймаут или потерянный ответ не означают, что деньги не списались
- Разработаешь API заказов на FastAPI и устойчивый клиент сервиса оплаты, который корректно работает при задержках, отказах и потерянных ответах
- Домашнее задание: Добавишь отмену заказа и изменение адреса с проверкой состояния заказа. Найдёшь ломающие изменения контракта и предложишь совместимые альтернативы. Доработаешь идемпотентность создания заказа и проверишь повторные и конкурентные запросы
- Результат недели: Научишься проектировать API вокруг задач потребителя и учитывать частичные отказы при взаимодействии между сервисами.
- Асинхронное взаимодействие на Kafka
- Сравнишь Kafka, RabbitMQ, Redis Pub/Sub и NATS, разберёшь их отличия и критерии выбора
- Изучишь топики, партиции, смещения и группы потребителей
- Научишься выбирать ключ события и учитывать гарантии порядка сообщений внутри партиции
- Оформишь событие как публичный контракт сервиса
- Решишь проблему двойной записи с помощью Transactional Outbox
- Реализуешь идемпотентного потребителя и разберёшь обработку ядовитых сообщений через DLQ
- Проведёшь событие OrderCreated через Kafka, настроишь outbox и добьёшься того, чтобы уведомление создавалось один раз даже при повторной доставке события
- Домашнее задание: Добавишь обработку невалидных сообщений через DLQ и проверишь совместимость нового поля события со старым потребителем. Создашь отдельного потребителя для подсчёта заказов покупателей с защитой от дублей
- Результат недели: Разберёшься, как Kafka помогает развязать сервисы во времени и какие гарантии приходится обеспечивать на стороне приложения.
- Данные и транзакции между сервисами
- Воспроизведёшь потерянное обновление и защитишь остатки атомарным условным UPDATE, проверишь решение на параллельных резервах
- Разберёшь паттерн Database per service и сохранение изменений вместе с событиями в одной локальной транзакции
- Изучишь оркестровку, хореографию и компенсации
- Построишь сагу как сохраняемую машину состояний
- Проверишь восстановление саги после перезапуска и разберёшь, почему отмена требует подтверждения компенсаций
- Воспроизведёшь и исправишь гонки в PostgreSQL, а затем реализуешь сагу оформления заказа с оплатой, резервированием товара и компенсациями
- Домашнее задание: Добавишь таймауты шагов саги и обработку запоздавших ответов. Проверишь освобождение занятых ресурсов, подтверждение компенсаций и обработку неизвестного исхода платежа. Убедишься, что параллельные резервы не превышают остаток
- Результат недели: Научишься защищать данные от конкурентных изменений и проводить бизнес-операции через несколько сервисов без общей ACID-транзакции.
- Запросы, BFF и переход к микросервисам
- Разберёшь устройство API Gateway и реализуешь BFF для клиентского приложения
- Разберёшь аутентификацию и авторизацию: проверку JWT на шлюзе, создание подписи закрытым ключом, её проверку открытым и проверку прав на заказ в сервисе
- Соберёшь данные нескольких сервисов через API Composition
- Настроишь осознанную деградацию необязательных частей экрана
- Построишь CQRS-проекцию из событий Kafka
- Разберёшь устранение N+1 через батч-запросы и защиту проекции от повторных и запоздавших событий
- Научишься пересобирать проекцию из журнала событий
- Разберёшь постепенный переход от монолита по схеме Strangler Fig
- Создашь BFF для экрана "Мой заказ", проекцию истории заказов и измеришь, во что обошлось разделение системы на сервисы
- Домашнее задание: Заново соберёшь историю заказов из событий Kafka и проверишь, что данные совпадают с текущей историей заказов. Опишешь поведение частей экрана при сбоях. Покажешь, чем отличается модель товара в каталоге и на складе и как переводить данные между этими моделями
- Результат недели: Разберёшься, чем заменить JOIN после разделения данных между сервисами и как скрыть внутреннюю структуру системы от клиента.
- Микросервис в продакшене: тесты, наблюдаемость и выкатка
- Разберёшь юнит-, интеграционные, компонентные и контрактные тесты
- Настроишь логи и распределённую трассировку
- Разберёшь метрики частоты запросов, ошибок и задержек, целевые показатели надёжности и условия для оповещений
- Передашь контекст трассы через HTTP, Kafka и outbox
- Добавишь liveness- и readiness-пробы
- Реализуешь корректную остановку сервиса
- Разберёшь rolling update, blue-green, canary и постепенное обновление БД, API и событий с сохранением совместимости старых и новых версий сервисов
- Напишешь тесты на границах сервиса, соберёшь в Jaeger единую трассу от HTTP-запроса до уведомления, свяжешь её с логами и проверишь поведение проб и корректной остановки
- Домашнее задание: Напишешь тест, который проверяет отмену заказа и снятие блокировки денег при отказе склада, включая повторную доставку ответа. Спланируешь переименование поля в базе, API и событиях так, чтобы старые и новые версии сервисов продолжали работать вместе, и реализуешь первый этап изменения
- Результат недели: Подготовишь сервис к работе в распределённой системе: от тестирования границ до безопасного обновления версий.
Теги курса
Отзывов пока нет. Будьте первым!
Этот курс сейчас в процессе организации складчины. Нажмите кнопку «Записаться» и ожидайте старта — вам придёт уведомление. Когда складчина стартует, в карточке курса будет указан актуальный взнос. Текущая цена пока в процессе формирования и может отличаться от финальной.
Да, мы стремимся, чтобы финальный взнос был не больше ≈10% от оригинальной цены курса. Чем больше участников записывается в складчину, тем ниже выходит взнос для каждого.
Нажмите кнопку «Записаться» и авторизуйтесь на сайте через email (через ту же почту, которую будете использовать для входа). В личном кабинете вас будут ждать инструкции, как пригласить других участников — чем больше людей записалось, тем быстрее стартует складчина и тем ниже взнос. Как только складчина готова к приобретению, вам придёт уведомление.