phone_picture

Цель курса

Научиться мыслить в духе микросервисной архитектуры: разумно делить монолит, определяя границы сервисов по сущностям и реальным данным, а не по интуиции или количеству строк кода.

Пойдём от простого к сложному: начнём с боли монолита, затем разберём HTTP и RPC, дойдём до брокера сообщений, данных на стыке сервисов и распределённых транзакций, а закончим физическим разделением на отдельные сервисы.

Программа курса

урок 1

  • Развёртывание и изучение монолита
  • Разбор реальных проблем CI/CD
  • Демонстрация сильной связанности кода
  • Одна точка отказа — модуль роняет всё приложение
  • Сложности масштабирования частей монолита
  • Фиксация списка болей монолита

урок 2

  • Разделение монолита на модули через HTTP + REST
  • Первичность контрактов и вторичность транспорта
  • Знакомство с bounded context и границами доменов
  • Добавление requestId для сквозного логирования
  • Цепочка вызовов A-B-C и её намеренная поломка
  • Проблема синхронных вызовов

урок 3

  • Создание минимального RPC поверх Fastify
  • Валидация контрактов через AJV
  • Знакомство с gRPC: бинарный протокол
  • Прирост скорости и строгости контракта
  • RPC и проблема A-B-C
  • Повторы запросов при обычном RPC / gRPC

урок 4

  • Знакомство с брокерами сообщений
  • Pub / sub на RabbitMQ
  • Асинхронность как решение проблемы A-B-C
  • Замена прямых связей на события
  • Eventual consistency вместо мгновенной согласованности
  • Проблема потери событий и transactional outbox

урок 5

  • Отдельная база данных на каждый сервис
  • JOIN внутри одной БД, проблемы между сервисами
  • API Composition или денормализация через события
  • Снапшоты чужих данных внутри своего сервиса
  • Read-model как отдельная таблица под сложную выборку
  • Упрощённый CQRS: запись в одно место, чтение из другого

урок 6

  • Проблема распределённых транзакций без общей БД
  • Сага через хореографию на упрощённом примере из 2 шагов
  • Компенсирующее действие вместо отката транзакции
  • Идеи оркестрации как альтернативного подхода
  • Nanoservices: что будет, если резать слишком мелко
  • Критерии оценки размера сервиса

урок 7

  • Виды сервисов: доменные и общие (shared)
  • Notifications как основной пример fan-out
  • Event Bus без искусственных компромиссов
  • Надёжные retry для внешних провайдеров
  • Идемпотентность обработчиков
  • Примеры популярных shared сервисов

урок 8

  • Модульный монолит как промежуточный шаг
  • Модули в отдельных процессах и смена транспорта
  • Инфраструктурный минимум: Docker, конфиги, мониторинг
  • Анализ списка болей монолита: что удалось решить
  • Цена микросервисов и новый список боли :)
  • Подведение итогов курса

Чему вы научитесь

по итогам двух месяцев прохождения курса

Замечать проблемы монолита

Не «делить, потому что модно», а находить конкретные симптомы: сильную связанность в коде, единую точку отказа, невозможность масштабировать часть системы отдельно от остальной.

Определять границы сервисов

Продумывать, что должно быть одним сервисом, а что разными, на основе bounded context и реальной структуры данных, а не на основе интуиции или слухов про количество строк кода.

Выбирать транспортный слой

Понимать, что контракт между сервисами важнее способа передачи данных и уметь работать с обычным REST, самописным RPC, и gRPC — зная сильные и слабые стороны каждого.

Связывать сервисы через event

Вовремя переходить от хрупких синхронных цепочек вызовов A-B-C к pub/sub на RabbitMQ, а также понимать цену такого перехода.

Управлять данными на стыке

Держать отдельную базу на каждый сервис и понимать, где можно использовать JOIN, а где снапшоты по событию или отдельную read-model для сложных запросов.

Организовывать транзакции

Проводить операции в несколько шагов через разные сервисы и аккуратно откатывать их вручную, если что-то пошло не так по ходу процесса.

Преподаватель курса

Дмитрий Лаврик

Профессиональный веб-разработчик

Опыт работы в сфере разработки сайтов более 15 лет. Ориентируется во всех вопросах создания сайтов, от вёрстки до backend-а.

Опытный преподаватель

Начиная с 2011 года, под его руководством тысячи учеников прошли путь от новичков до успешных веб-программистов. Если вы ещё не знакомы с Дмитрием, рекомендуем заглянуть на его youtube-канал, где вы найдете много полезных видео и сможете узнать стиль преподавания Дмитрия.

Дмитрий Лаврик

Что вы получите

Видеозаписи всех уроков

В хорошем качестве с возможностью скачать видео. Продолжительность каждого занятия около двух часов. На уроках разбираются домашние работы учеников и новый материал.

Материалы и исходники

Все примеры, которые мы рассматриваем на уроках, вы получаете в архиве. Таким образом, даже не написав ни строчки кода, вы получаете набор готовых решений, сделанных на уроке.

Доступ в закрытую группу

Во время прохождения курса и после его завершения участники тусуются в рамках закрытой площадки, где помогают друг другу, а также задают вопросы преподавателю и получают ответы на них.

Обзор курса

Внимание! Для прохождения данного курса пригодятся уверенные знания в node и typescript.

Если вы хотите подробнее ознакомиться с идеями курса,

посмотрите видео, расположенное рядом

Помимо идей и программы курса в нём обсуждаются философские вопросы выбора между монолитом и микросервисами.

Запись на курс

Доступно в формате видеозаписей

со свежего потока (август 2026)

21 000 руб. 10 500 руб.

Хотите цену ещё лучше?
Осенние старты!
 
Способы оплаты

Часто задаваемые вопросы

Микросервисы всегда лучше монолита

Нет, монолит — абсолютно рабочая архитектура для многих задач, и весь курс построен не на тезисе «микросервисы лучше», а на том, чтобы показать конкретные проблемы, которые решают микросервисы, и конкретную цену, которую за это приходится платить. "Пилить или не пилить" - вот в чём первый важный вопрос для многих проектов.

Будет ли полезно для тех, кто пишет монолиты

Да, польза будет, даже если сейчас не планируете микросервисы. Как только в монолите появляются задачи вроде онлайн-оплаты, отправки писем, вебхуки, фоновые задачи и т.п., то это уже в какой-то мере и степени распределённая система с теми же граблями: потерянные события, повторная доставка, рассинхрон данных.

Насколько сложный курс?

Курс рассчитан на уверенного мидла — не нужно заранее знать RabbitMQ, gRPC, саги или Docker, всё это разбирается с нуля, шаг за шагом. Но нужен уверенный Node.js, TypeScript, опыт работы с любой SQL / NoSQL базой, понимание принципов построения RESTFul API.

Почему Docker только на последнем занятии

Потому что курс идёт от смысла к инфраструктуре, а не наоборот. Физическое разнесение сервисов по контейнерам — это последний, механический шаг, который имеет смысл только после того, как правильно определены границы сервисов и контракты между ними.

Пишем свой RPC и свою реализацию саги

Да, в учебных целях. Собрав минимальную версию своими руками (RPC поверх Fastify, сага на 2 шагах через события), вы будете понимать, что происходит внутри инструмента, а не работать с ним как с чёрным ящиком.

--

-----