Общая информация
| Параметр | Значение |
|---|---|
| Автор | Chris Richardson |
| Год | 2018 |
| Страниц | 520 |
| Уровень | Advanced |
| Издательство | Manning |
| Рейтинг полезности | 5/5 |
О чём эта книга
Microservices Patterns -- это глубокое погружение в конкретные паттерны проектирования микросервисных систем. Если книга Ньюмана отвечает на вопрос "что такое микросервисы", то Richardson отвечает на вопрос "как их реализовать". Каждая глава посвящена конкретной проблеме и паттернам её решения.
Главная ценность: Это самая практичная книга о паттернах микросервисов. Richardson описывает реальные проблемы (управление транзакциями, запросы к нескольким сервисам, тестирование) и даёт конкретные решения с примерами кода.
Структура книги
Декомпозиция и коммуникация
| Глава | Тема | Ключевые паттерны |
|---|---|---|
| 1 | Escaping Monolithic Hell | Monolith vs Microservices, когда мигрировать |
| 2 | Decomposition Strategies | Decompose by business capability, by subdomain |
| 3 | Interprocess Communication | REST, gRPC, messaging, domain events |
| 4 | Managing Transactions with Sagas | Choreography saga, orchestration saga |
| 5 | Business Logic Design | Aggregate pattern, domain events |
Запросы и данные
| Глава | Тема | Ключевые паттерны |
|---|---|---|
| 6 | Event Sourcing | Event store, snapshots, CQRS |
| 7 | Implementing Queries | API Composition, CQRS |
| 8 | External API Patterns | API Gateway, BFF |
Тестирование и deployment
| Глава | Тема | Ключевые паттерны |
|---|---|---|
| 9 | Testing Microservices | Consumer-driven contracts, component testing |
| 10 | Production-Ready Services | Observability, health checks, externalized config |
| 11 | Deploying Microservices | Docker, Kubernetes, service mesh |
| 12 | Refactoring to Microservices | Strangler Fig, Anti-corruption layer |
Ключевые паттерны книги
Saga Pattern
Управление распределёнными транзакциями без 2PC (two-phase commit):
Choreography Saga:
Order Service → (OrderCreated event)
→ Kitchen Service → (TicketCreated event)
→ Payment Service → (PaymentAuthorized event)
→ Order Service → (OrderApproved)
Orchestration Saga:
Order Saga Orchestrator:
1. Create Order (pending)
2. Verify Consumer
3. Create Ticket
4. Authorize Payment
5. Approve Order / Reject Order (compensate)
Когда что использовать:
| Критерий | Choreography | Orchestration |
|---|---|---|
| Связанность | Низкая | Средняя |
| Понятность | Сложно отследить | Логика в одном месте |
| Простые саги | Подходит | Избыточно |
| Сложные саги | Трудно управлять | Подходит |
CQRS (Command Query Responsibility Segregation)
Разделение модели чтения и записи:
- Command side -- обрабатывает команды, обновляет состояние
- Query side -- оптимизированные представления для чтения
- Синхронизация через события
Event Sourcing
Хранение состояния как последовательности событий:
- Аудит бесплатно
- Возможность восстановить состояние на любой момент времени
- Сложность: eventual consistency, schema evolution, snapshots
API Gateway Pattern
Единая точка входа для клиентов:
- Маршрутизация запросов
- Аутентификация
- Rate limiting
- Агрегация ответов от нескольких сервисов
Strangler Fig Pattern
Постепенная миграция с монолита на микросервисы:
- Новая функциональность -- в микросервисах
- Старая -- постепенно мигрирует
- Facade/proxy перенаправляет трафик
Пять ключевых идей
1. Database per Service
Каждый микросервис владеет своей базой данных. Общая БД -- это антипаттерн, потому что создаёт tight coupling.
2. Sagas вместо распределённых транзакций
2PC не масштабируется. Саги -- это последовательность локальных транзакций с компенсирующими действиями при ошибках.
3. CQRS решает проблему запросов
Запросы к нескольким сервисам -- сложная задача. CQRS позволяет создавать денормализованные представления для чтения.
4. Event Sourcing -- не для всех
Event Sourcing даёт мощные возможности, но добавляет сложность. Применяйте только там, где аудит и восстановление состояния критичны.
5. Тестирование микросервисов -- это слоёная задача
Unit tests, integration tests, contract tests, component tests, E2E tests -- каждый уровень решает свою задачу. Consumer-driven contracts -- ключевой паттерн.
Плюсы
- Глубина -- каждый паттерн разобран с примерами кода и диаграммами
- Практичность -- сквозной пример (FTGO application) проходит через всю книгу
- Sagas -- лучшее описание saga pattern в литературе
- CQRS/ES -- подробное объяснение с trade-offs
- Тестирование -- отдельная глава с конкретными стратегиями
Минусы
- Java-centric -- все примеры на Java/Spring, нужна адаптация для других стеков
- Сложность -- не для начинающих, требует опыта с распределёнными системами
- Объём -- 520 страниц, плотный материал
- Год выпуска -- некоторые инструменты (Eventuate) нишевые
- Нет Kubernetes-native -- deployment описан поверхностно
Кому читать
- Senior-инженерам, проектирующим микросервисные системы
- Архитекторам, решающим проблемы распределённых транзакций
- Тем, кто уже прочитал Newman и хочет глубже разобраться в паттернах
- Инженерам, внедряющим Event Sourcing или CQRS
Кому НЕ читать
- Начинающим -- сначала Newman для общего понимания
- Тем, кто не работает с микросервисами
- Инженерам, которым нужен обзор, а не глубина
Рекомендация: Эта книга -- обязательное чтение для всех, кто проектирует или поддерживает микросервисные системы. Глава про Sagas окупает стоимость книги. Читайте после Newman и параллельно с практическим применением.