Учебник Микросервисы для начинающих
Микросервисы без хайпа: где они действительно нужны, как разрезать систему и как не получить распределённый монолит.
Курс «Микросервисы: архитектура распределённых систем» состоит из 6 разделов и 17 уроков: Монолит и микросервисы, Взаимодействие сервисов, Данные, Инфраструктура, Отказоустойчивость и Практика. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.
Программа курса
1 Монолит и микросервисы
- Монолит против микросервисов
Что монолит делает лучше микросервисов, сколько стоит каждый сетевой вызов, почему цепочка сервисов менее надёжна и зачем стартапу монолит.
- Когда микросервисы — плохая идея
Признаки преждевременного дробления на сервисы, что такое распределённый монолит и почему без подходящей структуры команд микросервисы не взлетят.
- Границы сервисов и предметная область
Как резать систему на сервисы: по бизнес-возможностям, а не по слоям. Bounded context из DDD и независимый деплой как проверка правильной границы.
- Монолит против микросервисов
2 Взаимодействие сервисов
- Синхронное взаимодействие: REST и gRPC
Запрос-ответ между микросервисами: как REST и gRPC устроены изнутри, почему цепочка синхронных вызовов копит задержку и роняет доступность, и как этим управлять.
- Асинхронное взаимодействие и события
События вместо вызовов: как брокер сообщений развязывает сервисы, чем событие отличается от команды, и что eventual consistency означает для бизнеса и пользователя.
- Контракты и версионирование API
Как менять API микросервиса, не ломая потребителей: обратная совместимость, стратегии версионирования, contract testing и автоматическая проверка breaking changes в CI.
- Синхронное взаимодействие: REST и gRPC
3 Данные
- База данных на сервис
Почему общая база превращает микросервисы в распределённый монолит, зачем осознанно дублировать данные и чем заменить JOIN между сервисами.
- Распределённые транзакции и Saga
Почему двухфазный коммит не используют в микросервисах, как устроена Saga с компенсациями и чем хореография отличается от оркестрации.
- CQRS и Event Sourcing (обзор)
CQRS: зачем разделять модель записи и модель чтения. Event Sourcing: событие как источник истины, аудит и машина времени — и когда это оверинжиниринг.
- База данных на сервис
4 Инфраструктура
- API Gateway и BFF
Зачем нужен API Gateway: единая точка входа, аутентификация и rate limiting на границе, паттерн Backend for Frontend и риск превратить gateway в новый монолит.
- Service Discovery и балансировка
Как сервисы находят друг друга в динамике: реестр сервисов, client-side и server-side discovery, DNS в Kubernetes, балансировка нагрузки и health-checks (liveness, readiness).
- Конфигурация и секреты
Конфигурация микросервисов: принцип 12-factor «конфиг вне кода», централизованные хранилища, feature flags, секреты, Vault и ротация. Почему переменных окружения не всегда хватает.
- API Gateway и BFF
5 Отказоустойчивость
- Таймауты, ретраи и Circuit Breaker
Почему отказ соседнего сервиса — норма, зачем таймаут обязателен всегда, как ретраи вызывают лавину запросов и как работает Circuit Breaker и его три состояния.
- Идемпотентность и повторная доставка
Почему сообщение в микросервисах приходит дважды, что такое ключ идемпотентности и как сделать списание денег безопасным для повторной доставки.
- Наблюдаемость: логи, метрики, трейсинг
Три столпа наблюдаемости микросервисов: метрики, логи и трейсинг. Сквозной trace-id, формат traceparent, что логировать и чего не логировать никогда.
- Таймауты, ретраи и Circuit Breaker
6 Практика
- Как разрезать монолит пошагово
Паттерн Strangler Fig: как душить монолит по кусочку, что выносить первым, как жить с общей базой на переходный период и переключать трафик без риска.
- Антипаттерны микросервисов
Пять антипаттернов микросервисов: распределённый монолит, общая база, наносервисы, длинная синхронная цепочка и жизнь без трейсинга — признаки и лечение.
- Как разрезать монолит пошагово