phone_picture

Цель курса

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

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

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

6 августа, 19:30 — урок 1

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

13 августа, 19:30 — урок 2

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

20 августа, 19:30 — урок 3

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

27 августа, 19:30 — урок 4

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

3 сентября, 19:30 — урок 5

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

10 сентября, 19:30 — урок 6

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

17 сентября, 19:30 — урок 7

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

24 сентября, 19:30 — урок 8

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

8 онлайн уроков

Один раз в неделю по четвергам с 19:30 МСК. Продолжительность каждого занятия около двух часов. На уроках разбираются домашние работы учеников и новый материал.

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

Если вы по какой-то причине не смогли посетить урок, не переживайте, спустя пару часов после окончания занятия он доступен в записи в хорошем качестве :)

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

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

Домашние задания

После каждого урока выдаётся домашнее задание, которое нужно сделать для закрепления пройденного материала. Плохие оценки не ставим – только конструктивные комментарии :)

Обратную связь от преподавателя

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

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

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

Обзор курса

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

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

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

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

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

Скидка на раннюю запись!

21 000 руб. 14 700 руб.

 
Способы оплаты

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

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

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

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

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

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

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

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

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

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

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

Будут ли записи уроков

Да, конечно. Видеозапись и материалы выкладываются в течение нескольких часов после окончания урока.