Микросервисная архитектура в продакшен разработке

10 участников

О чём курс

Курс обучает проектированию масштабируемых распределённых систем на стеке 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 и событиях так, чтобы старые и новые версии сервисов продолжали работать вместе, и реализуешь первый этап изменения
    • Результат недели: Подготовишь сервис к работе в распределённой системе: от тестирования границ до безопасного обновления версий.
Складчина создана 28 октября 2026 г.

Теги курса

Проблемы
4 804 ₽ 40 700 ₽