Контекст
Стратегии декомпозиции
Способ декомпозиции системы определяет типы и количество межсервисных взаимодействий.
Паттерны межсервисной коммуникации нужно выбирать не по моде, а по latency budget, критичности операции и операционным ограничениям. Главная цель - предсказуемое поведение системы под нагрузкой и при отказах.
Синхронные паттерны
HTTP/gRPC request-response
Подходит для low-latency запросов, когда клиенту нужен немедленный ответ. Требует строгого timeout/retry контроля.
Aggregator/BFF composition
Отдельный сервис собирает данные из нескольких upstream. Удобно для UI, но может стать latency bottleneck.
Асинхронные паттерны
Queue-based async
Producer и consumer развязаны по времени; удобно для выравнивания spikes и фоновых процессов.
Pub/Sub events
Один emitter публикует событие, несколько подписчиков реагируют независимо. Хорошо для расширяемости.
Event-carried state transfer
Событие несет достаточно контекста, чтобы снизить синхронные callback-запросы между сервисами.
Reliability
Паттерны отказоустойчивости
Коммуникация без resilience-политик в распределенной среде обычно неустойчива.
Как выбирать паттерн
Нужен ответ пользователю в рамках одного HTTP-запроса -> чаще sync path.
Нужны устойчивость к пикам и loose coupling -> async через queue/topic.
Если операция критична для денег/заказов, проверяйте idempotency и ordering до выбора паттерна.
Если у вас много cross-service hops, снижайте глубину синхронных цепочек и внедряйте cache/materialized views.
Timeout budgets на каждый hop и общая end-to-end дедлайн-политика.
Retry с jitter и retry budget, чтобы не создавать retry storm при деградации зависимости.
Circuit breaker/bulkhead для изоляции отказов и контроля конкурентности.
Idempotency keys для команд и deduplication для event-consumers.
DLQ/parking lot для невалидных или проблемных сообщений.
Практический чеклист
- Для каждого интеграционного канала задан owner, SLO и error budget.
- Контракты версионируются и проверяются contract-тестами в CI.
- Есть стратегия деградации при недоступности downstream сервиса.
- Трассировка покрывает end-to-end path через sync и async сегменты.
- Критичные команды и события обрабатываются идемпотентно.
Связанные главы
Event-Driven Architecture
Глубже про модели событий и проектирование асинхронных flows.
Паттерны отказоустойчивости
Timeout/retry/circuit breaker как обязательный слой inter-service коммуникации.
Консистентность и идемпотентность
Как обеспечить корректность данных при retries и повторной доставке событий.
Service Discovery
Коммуникации между сервисами опираются на корректное обнаружение endpoint-ов.
Стратегии декомпозиции
Границы сервисов напрямую влияют на интенсивность и сложность коммуникаций.
