System Design Space

    Глава 120

    Обновлено: 14 февраля 2026 г. в 07:19

    Паттерны межсервисной коммуникации

    Прогресс части0/17

    Синхронные и асинхронные паттерны взаимодействия между сервисами: RPC, messaging, pub/sub, contracts, retries и backpressure.

    Контекст

    Стратегии декомпозиции

    Способ декомпозиции системы определяет типы и количество межсервисных взаимодействий.

    Открыть главу

    Паттерны межсервисной коммуникации нужно выбирать не по моде, а по 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 сегменты.
    • Критичные команды и события обрабатываются идемпотентно.

    Связанные главы

    References