Companion Book
От монолита к микросервисам
Практическое руководство по миграции с монолита — как применить теорию из этой книги на практике.
Building Microservices, 2nd Edition (Микросервисы и интеграция)
Авторы: Sam Newman
Издательство: O'Reilly Media, 2021 (2nd Edition)
Объём: 612 страниц
Разбор книги Sam Newman: декомпозиция, коммуникация, deployment, тестирование и организационные паттерны.
Оригинал
ПереводСтруктура книги
Книга разделена на три логические части, охватывающие весь путь от основ до продвинутых тем:
Часть I: Основы
Что такое микросервисы, как их моделировать, декомпозиция монолита и паттерны разбиения.
Часть II: Реализация
Коммуникация между сервисами, workflow, build/deploy, тестирование, observability.
Часть III: Люди
Организационные структуры, безопасность, resilience и масштабирование.
Часть I: Основы микросервисов
Глава 1: Что такое микросервисы?
Ключевые характеристики:
- Independent deployability — главный критерий
- Моделирование вокруг бизнес-домена
- Владение своими данными
- Технологическая гибкость
Когда НЕ использовать:
- Маленькая команда (до 5-10 человек)
- Непонятный домен — сначала монолит
- Стартап на ранней стадии
- Нет опыта в distributed systems
Связанная книга
Learning Domain-Driven Design
Глубокое погружение в DDD: strategic и tactical design, bounded contexts, context maps.
Глава 2: Как моделировать микросервисы
Domain-Driven Design как основа декомпозиции:
Bounded Context
- Чёткие границы домена
- Собственный ubiquitous language
- Один контекст = один (или несколько) сервисов
Context Maps
- Customer-Supplier
- Conformist
- Anticorruption Layer
- Open Host Service
Глава 3: Разбиение монолита
Практические паттерны миграции от монолита к микросервисам:
Strangler Fig
Постепенная замена функционала новыми сервисами
Branch by Abstraction
Абстракция → новая реализация → переключение
Parallel Run
Запуск старой и новой версии параллельно
Глава 4: Разбиение базы данных
Паттерны разделения данных:
- Database per Service — идеал
- Shared Database — временный компромисс
- Database View — readonly доступ
- Database Wrapping Service
Работа с данными:
- Change Data Capture (Debezium)
- Saga pattern для транзакций
- Eventual consistency
- Outbox pattern
Часть II: Реализация
Связанный кейс
API Gateway
Централизация коммуникации: routing, authentication, rate limiting и BFF pattern.
Глава 5: Коммуникация между сервисами
Синхронная коммуникация:
REST
Простота, широкая поддержка, OpenAPI
gRPC
Производительность, типизация, streaming
GraphQL
Гибкость запросов, federation
Асинхронная коммуникация:
Message Brokers
Kafka, RabbitMQ, AWS SQS
Event-Driven
Loose coupling, eventual consistency
Request-Response async
Correlation IDs, reply queues
Глава 6: Workflow
Как реализовать бизнес-процессы, охватывающие несколько сервисов:
Orchestration
- Центральный координатор
- Saga Execution Coordinator
- Temporal, Camunda, AWS Step Functions
- Проще отслеживать, сложнее масштабировать
Choreography
- Каждый сервис реагирует на события
- Loose coupling
- Сложнее отлаживать
- Implicit workflow через event sourcing
Глава 7: Build и Deploy
Continuous Delivery как основа успешных микросервисов:
Containers
Docker, образы, registry
Kubernetes
Оркестрация, service discovery
GitOps
ArgoCD, Flux, declarative deployment
Глава 8: Тестирование
Стратегия тестирования в мире микросервисов:
| Тип тестов | Что тестирует | Инструменты |
|---|---|---|
| Unit | Бизнес-логика внутри сервиса | JUnit, pytest, Jest |
| Integration | Взаимодействие с БД, внешними API | Testcontainers, WireMock |
| Contract | API контракты между сервисами | Pact, Spring Cloud Contract |
| E2E | Полный user journey | Cypress, Playwright |
Главы 9-10: Observability и Security
Three Pillars of Observability:
- Logs — структурированные, агрегированные (ELK)
- Metrics — Prometheus, Grafana
- Traces — Jaeger, Zipkin, OpenTelemetry
Security:
- mTLS — service mesh (Istio, Linkerd)
- API Gateway — authentication, rate limiting
- Zero Trust — verify everything
- Secrets Management — Vault, AWS Secrets
Часть III: Люди и организация
Главы 11-12: Resilience и Масштабирование
Паттерны устойчивости:
- Circuit Breaker — изоляция сбоев
- Bulkhead — ограничение blast radius
- Timeout — не ждать вечно
- Retry с backoff — умные повторы
Масштабирование:
- Horizontal scaling — больше инстансов
- Auto-scaling — по метрикам
- Caching — Redis, CDN
- CQRS — разделение чтения/записи
Глава 13-14: Организационные структуры
"Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations."
— Conway's Law
Team Topologies:
- Stream-aligned teams — по бизнес-потоку
- Platform teams — внутренняя платформа
- Enabling teams — помощь другим командам
- Complicated-subsystem teams — специалисты
Практики:
- Two-Pizza Teams — 6-8 человек
- You Build It, You Run It
- Internal Open Source
- Inverse Conway Maneuver
Ключевые выводы
Do:
- Начинать с монолита, если домен непонятен
- Independent deployability — главный критерий
- Database per service с eventual consistency
- Инвестировать в observability с первого дня
Don't:
- Микросервисы ради микросервисов
- Distributed monolith — худшее из двух миров
- Shared database между сервисами надолго
- Игнорировать организационную структуру
Для кого эта книга?
Идеально подходит:
- Архитекторам, планирующим миграцию на микросервисы
- Tech leads, принимающим архитектурные решения
- Разработчикам в растущих командах
- Всем, готовящимся к System Design интервью
Предварительные знания:
- Опыт работы с веб-приложениями
- Базовое понимание distributed systems
- Знакомство с Docker/Kubernetes (желательно)
Совет: Читайте вместе с DDIA — Kleppmann даёт глубокую теорию распределённых систем, а Newman — практические паттерны их организации в production.
