HardТеория2 min

Microservices Patterns

Паттерны декомпозиции, саги, API Gateway, CQRS, Event Sourcing и управление данными в микросервисах

Общая информация

Параметр Значение
Автор 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 и параллельно с практическим применением.