Гайды
Паттерны микросервисной архитектуры
Database per service, Saga, BFF, strangler fig; API Gateway, очереди, observability и когда оставаться с монолитом.
~11 мин чтения
Паттерны микросервисной архитектуры
Микросервисы — независимые деплой сервисы с границами по бизнес-способностям. Паттерны: API Gateway, Saga для распределённых транзакций, CQRS, Strangler Fig для миграции. Коммуникация — gRPC на Python и Go; очереди — Kafka: топики, RabbitMQ. Шлюз и discovery — API Gateway и Consul/etcd.
1. Database per service
Каждый сервис владеет своей БД; нет общих таблиц через «заднюю дверь». Консистентность — Saga (оркестрация/хореография) и eventual consistency.
2. Anti-Corruption Layer
Защита домена от «легаси» моделей внешней системы через переводной слой.
3. BFF
Backend for Frontend — отдельный API под web/mobile, агрегирующий вызовы.
4. Observability
Коррелированные логи/трейсы — OpenTelemetry; устойчивость — Circuit breaker и retry.
5. Когда не дробить
Маленькая команда и домен — модульный монолит часто дешевле.
6. Синхрон vs асинхрон
REST/HTTP и gRPC для запрос/ответ; очереди (Kafka, RabbitMQ) для развязки по времени и буферизации пиков. Смешение в одном флоу без явных таймаутов и идемпотентности ведёт к каскадным сбоям — см. Circuit breaker.
7. Версионирование API и деплой
Parallel run двух версий за балансировщиком, header-based versioning или путь /v2/ — договоритесь в команде. Blue/green и canary на уровне mesh или ingress снижают риск; связка с GitOps даёт воспроизводимые манифесты.
8. Transactional Outbox
Чтобы не терять доменное событие при сбое сразу после коммита в БД, пишите событие в таблицу outbox в той же транзакции, что и бизнес-данные. Отдельный relay (процесс или CDC) читает outbox и публикует в брокер (Kafka, RabbitMQ). Так вы избегаете «двойной записи» без распределённых транзакций и сохраняете at-least-once доставку при идемпотентных потребителях.
9. Чек-лист
- Контракты версионируются (consumer-driven contracts).
- Автономные команды ↔ сервисы (Conway).
- План отката и feature flags — Feature flags.
- SLO/SLI на границах сервисов и бюджеты ошибок.
- Единый correlation id по цепочке вызовов.
Дальше: тег «Микросервисы»